#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a[100100];
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
ll n;
cin >> n;
ll s = 0LL;
for(ll i = 0LL; i < n; i++) {
cin >> a[i];
s += a[i];
}
vector<ll> dvs1, dvs2;
for(ll i = 1LL; i*i <= s; i++) {
if(s%i == 0LL) {
if(i <= n) {
dvs1.push_back(i);
}
if(s/i <= n) {
dvs2.push_back(s/i);
}
}
}
vector<ll> dvs = dvs2;
reverse(dvs1.begin(), dvs1.end());
dvs.insert(dvs.end(), dvs1.begin(), dvs1.end());
for(auto k: dvs) {
bool flag = true;
vector<ll> d(n + 1, 0LL);
ll h = 0LL;
for(ll i = 0LL; i < n; i++) {
h -= d[i];
ll diff = a[i] - h;
if(diff > 0LL && i + k <= n) {
h += diff;
d[i + k] += diff;
} else if(diff != 0LL) {
flag = false;
break;
}
}
if(flag) {
cout << k << "\n";
return 0;
}
}
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 63 64 65 66 | #include <bits/stdc++.h> using namespace std; typedef long long ll; ll a[100100]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); ll n; cin >> n; ll s = 0LL; for(ll i = 0LL; i < n; i++) { cin >> a[i]; s += a[i]; } vector<ll> dvs1, dvs2; for(ll i = 1LL; i*i <= s; i++) { if(s%i == 0LL) { if(i <= n) { dvs1.push_back(i); } if(s/i <= n) { dvs2.push_back(s/i); } } } vector<ll> dvs = dvs2; reverse(dvs1.begin(), dvs1.end()); dvs.insert(dvs.end(), dvs1.begin(), dvs1.end()); for(auto k: dvs) { bool flag = true; vector<ll> d(n + 1, 0LL); ll h = 0LL; for(ll i = 0LL; i < n; i++) { h -= d[i]; ll diff = a[i] - h; if(diff > 0LL && i + k <= n) { h += diff; d[i + k] += diff; } else if(diff != 0LL) { flag = false; break; } } if(flag) { cout << k << "\n"; return 0; } } return 0; } |
English