#include<bits/stdc++.h>
using namespace std;
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n,j;
long long a=0,i;
cin>>n;
vector<int>ile(n);
vector<int>abc;
for(i=0;i<n;++i){cin>>ile[i];a+=ile[i];}
for(i=1;i*i<=a;++i){
if(a%i==0){
if(i<=n) abc.push_back(i);
if(a/i<=n && i*i!=a) abc.push_back(a/i);
}
}
sort(abc.begin(),abc.end());
j=abc.size()-1;
while(j>=0){
int k = abc[j];
vector<long long>v(n,0);
long long b=0;
bool ok = true;
for(i=0;i<n;++i){
if(i>=k)b-=v[i-k];
long long p=ile[i]-b;
if(p< 0){ok=false;break;}
if(p>0){
if(i+k>n){ok=false;break;}
v[i]=p;
b+=p;
}
}
if(ok==true){
cout<<abc[j];
return 0;
}
--j;
}
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 | #include<bits/stdc++.h> using namespace std; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n,j; long long a=0,i; cin>>n; vector<int>ile(n); vector<int>abc; for(i=0;i<n;++i){cin>>ile[i];a+=ile[i];} for(i=1;i*i<=a;++i){ if(a%i==0){ if(i<=n) abc.push_back(i); if(a/i<=n && i*i!=a) abc.push_back(a/i); } } sort(abc.begin(),abc.end()); j=abc.size()-1; while(j>=0){ int k = abc[j]; vector<long long>v(n,0); long long b=0; bool ok = true; for(i=0;i<n;++i){ if(i>=k)b-=v[i-k]; long long p=ile[i]-b; if(p< 0){ok=false;break;} if(p>0){ if(i+k>n){ok=false;break;} v[i]=p; b+=p; } } if(ok==true){ cout<<abc[j]; return 0; } --j; } return 0; } |
English