#include <bits/stdc++.h>
using namespace std;
vector <long long> v;
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
int n;
cin>>n;
v.push_back(0);
long long suma=0;
for(int i=0; i<n; i++){
long long x;
cin>>x;
v.push_back(x);
suma+=x;
}
vector <long long> dzielniki;
for(long long i=1; i*i<=suma; i++){
if(suma%i==0){
dzielniki.push_back(i);
if(i*i!=suma)
dzielniki.push_back(suma/i);
}
}
sort(dzielniki.begin(),dzielniki.end());
reverse(dzielniki.begin(),dzielniki.end());
long long wynik=0;
for(long long dl:dzielniki){
vector <long long> v2(n+1,0);
long long akt=0;
bool udalosie=true;
for(int i=n; i>0; i--){
akt+=v2[i];
if(akt>v[i]){
udalosie=false;
break;
}
else if(akt<v[i]){
if(i-dl<0){
udalosie=false;
break;
}
v2[i-dl]-=v[i]-akt;
akt+=v[i]-akt;
}
}
if(udalosie){
wynik=dl;
break;
}
}
cout<<wynik;
}
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 | #include <bits/stdc++.h> using namespace std; vector <long long> v; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); int n; cin>>n; v.push_back(0); long long suma=0; for(int i=0; i<n; i++){ long long x; cin>>x; v.push_back(x); suma+=x; } vector <long long> dzielniki; for(long long i=1; i*i<=suma; i++){ if(suma%i==0){ dzielniki.push_back(i); if(i*i!=suma) dzielniki.push_back(suma/i); } } sort(dzielniki.begin(),dzielniki.end()); reverse(dzielniki.begin(),dzielniki.end()); long long wynik=0; for(long long dl:dzielniki){ vector <long long> v2(n+1,0); long long akt=0; bool udalosie=true; for(int i=n; i>0; i--){ akt+=v2[i]; if(akt>v[i]){ udalosie=false; break; } else if(akt<v[i]){ if(i-dl<0){ udalosie=false; break; } v2[i-dl]-=v[i]-akt; akt+=v[i]-akt; } } if(udalosie){ wynik=dl; break; } } cout<<wynik; } |
English