#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using str = string;
int main() {
int n;
cin >> n;
vector<int> v(n+1);
ll s = 0;
for(int i = 1; i <= n; i++) {
cin >> v[i];
s += v[i];
}
v[0] = 0;
deque<int> d1, d2;
for(int i = 1; i * i <= s; i++) {
if(s % i == 0) {
d1.push_front(i);
d2.push_back(s/i);
}
}
deque<int> d = d2;
for(int i = 0; i < d1.size(); i++) d.push_back(d1[i]);
for(auto e : d) {
vector<int> a(n, 0);
if(e == 1) {
cout << 1;
return 0;
}
bool ok = true;
for(int i = 0; i < n; i++) {
int add = v[i+1] - a[i];
if(add < 0) {
ok = false;
break;
}
for(int j = i; j < i + e && j < n; j++) {
a[j] += add;
if(a[j] > v[j+1]) {
ok = false;
break;
}
}
if(!ok) break;
}
if(ok) {
cout << e;
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 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | #include <bits/stdc++.h> using namespace std; using ll = long long; using str = string; int main() { int n; cin >> n; vector<int> v(n+1); ll s = 0; for(int i = 1; i <= n; i++) { cin >> v[i]; s += v[i]; } v[0] = 0; deque<int> d1, d2; for(int i = 1; i * i <= s; i++) { if(s % i == 0) { d1.push_front(i); d2.push_back(s/i); } } deque<int> d = d2; for(int i = 0; i < d1.size(); i++) d.push_back(d1[i]); for(auto e : d) { vector<int> a(n, 0); if(e == 1) { cout << 1; return 0; } bool ok = true; for(int i = 0; i < n; i++) { int add = v[i+1] - a[i]; if(add < 0) { ok = false; break; } for(int j = i; j < i + e && j < n; j++) { a[j] += add; if(a[j] > v[j+1]) { ok = false; break; } } if(!ok) break; } if(ok) { cout << e; return 0; } } } |
English