#include <bits/stdc++.h>
using namespace std;
int n;
vector<int> a;
bool check(int k) {
vector<long long> w(n, 0);
long long running = 0;
for (int i = 0; i < n; i++) {
if (i >= k) running -= w[i - k];
long long need = a[i] - running;
if (need < 0) return false;
if (need > 0 && i + k > n) return false;
w[i] = need;
running += need;
}
return true;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n;
a.resize(n);
for (int i = 0; i < n; i++) cin >> a[i];
long long S = 0;
for (int i = 0; i < n; i++) S += a[i];
vector<int> divs;
for (long long d = 1; d * d <= S; d++) {
if (S % d == 0) {
if (d <= n) divs.push_back(d);
if (S / d != d && S / d <= n) divs.push_back(S / d);
}
}
sort(divs.rbegin(), divs.rend());
for (int k : divs) {
if (check(k)) {
cout << k << "\n";
return 0;
}
}
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | #include <bits/stdc++.h> using namespace std; int n; vector<int> a; bool check(int k) { vector<long long> w(n, 0); long long running = 0; for (int i = 0; i < n; i++) { if (i >= k) running -= w[i - k]; long long need = a[i] - running; if (need < 0) return false; if (need > 0 && i + k > n) return false; w[i] = need; running += need; } return true; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cin >> n; a.resize(n); for (int i = 0; i < n; i++) cin >> a[i]; long long S = 0; for (int i = 0; i < n; i++) S += a[i]; vector<int> divs; for (long long d = 1; d * d <= S; d++) { if (S % d == 0) { if (d <= n) divs.push_back(d); if (S / d != d && S / d <= n) divs.push_back(S / d); } } sort(divs.rbegin(), divs.rend()); for (int k : divs) { if (check(k)) { cout << k << "\n"; return 0; } } } |
English