#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
int n; cin>>n;
vector<int> a(n);
for(auto &i:a)cin>>i;
ll s=accumulate(a.begin(),a.end(),0ll);
vector<int> f;
for(int i=1;i<=n&&1ll*i*i<=s;i++)
if(!(s%i)){
f.emplace_back(i);
if(1ll*i*i<s&&s/i<=n)f.emplace_back(s/i);
}
sort(f.begin(),f.end(),greater<>());
vector<int> e(n);
auto check=[&](int w){
if(w==1)return true;
int c=0;
for(int i=0;i<=n-w;i++){
int r=a[i]-c;
if(r<0)return false;
c=a[i]-e[i],e[i+w-1]=r;
}
for(int i=n-w+1;i<n;i++){
if(a[i]!=c)return false;
c=a[i]-e[i];
}
return !c;
};
for(int w:f)if(check(w))cout<<w<<endl,exit(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 | #include<bits/stdc++.h> using namespace std; typedef long long ll; int main(){ ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int n; cin>>n; vector<int> a(n); for(auto &i:a)cin>>i; ll s=accumulate(a.begin(),a.end(),0ll); vector<int> f; for(int i=1;i<=n&&1ll*i*i<=s;i++) if(!(s%i)){ f.emplace_back(i); if(1ll*i*i<s&&s/i<=n)f.emplace_back(s/i); } sort(f.begin(),f.end(),greater<>()); vector<int> e(n); auto check=[&](int w){ if(w==1)return true; int c=0; for(int i=0;i<=n-w;i++){ int r=a[i]-c; if(r<0)return false; c=a[i]-e[i],e[i+w-1]=r; } for(int i=n-w+1;i<n;i++){ if(a[i]!=c)return false; c=a[i]-e[i]; } return !c; }; for(int w:f)if(check(w))cout<<w<<endl,exit(0); } |
English