#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
vector<int>v;
int n;
vector<ll> divs(ll x) {
vector<pair<ll,int>>dv;
for (ll i=2; i*i<=x; i++) {
int cnt=0;
while (x%i==0) {
x/=i;
cnt++;
}
if (cnt>0) dv.push_back({i, cnt});
}
if (x!=1) dv.push_back({x, 1});
vector<ll>res={1};
for (auto [p, cnt] : dv) {
int sz=res.size();
for (int i=0; i<sz; i++) {
ll d = res[i];
ll cur = 1;
for (int i=1; i<=cnt; i++) {
cur*=p;
res.push_back(cur * d);
}
}
}
return res;
}
bool check(ll k) {
ll cnt=0;
vector<ll>nd(n+2);
for (int i=1; i<=n; i++) {
cnt-=nd[i];
if (cnt>v[i]) return false;
else if (cnt<v[i] and i+k-1<=n){
nd[i+k]+=v[i]-cnt;
cnt=v[i];
}
else if (cnt<v[i]) return false;
}
return true;
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cin>>n;
v=vector<int>(n+1);
ll sum=0;
for (int i=1; i<=n; i++) {
cin>>v[i];
sum+=v[i];
}
ll res=0;
for (ll div : divs(sum)) {
if(check(div)) res=max(res, div);
}
cout<<res<<'\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 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | #include<bits/stdc++.h> using namespace std; typedef long long ll; vector<int>v; int n; vector<ll> divs(ll x) { vector<pair<ll,int>>dv; for (ll i=2; i*i<=x; i++) { int cnt=0; while (x%i==0) { x/=i; cnt++; } if (cnt>0) dv.push_back({i, cnt}); } if (x!=1) dv.push_back({x, 1}); vector<ll>res={1}; for (auto [p, cnt] : dv) { int sz=res.size(); for (int i=0; i<sz; i++) { ll d = res[i]; ll cur = 1; for (int i=1; i<=cnt; i++) { cur*=p; res.push_back(cur * d); } } } return res; } bool check(ll k) { ll cnt=0; vector<ll>nd(n+2); for (int i=1; i<=n; i++) { cnt-=nd[i]; if (cnt>v[i]) return false; else if (cnt<v[i] and i+k-1<=n){ nd[i+k]+=v[i]-cnt; cnt=v[i]; } else if (cnt<v[i]) return false; } return true; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin>>n; v=vector<int>(n+1); ll sum=0; for (int i=1; i<=n; i++) { cin>>v[i]; sum+=v[i]; } ll res=0; for (ll div : divs(sum)) { if(check(div)) res=max(res, div); } cout<<res<<'\n'; return 0; } |
English