#include <bits/stdc++.h>
using namespace std;
#include <vector>
#include <algorithm>
#include <cmath>
static long long dih[100001];
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n;
cin>>n;
vector<int>tab(n);
long long a=0;
for(int i=0;i<n;i++){
cin>>tab[i];
a+=tab[i];
}
for(int i=n;i>=2;i--){
if(a%i!=0) continue;
int t=i;
memset(dih,0,sizeof(long long)*(n+1));
long long cur=0;
bool tak=true;
for(int j=0;j<n;j++){
cur+=dih[j];
if(tab[j]<cur){
tak=false;
break;
}
long long ta=tab[j]-cur;
if(ta>0){
if(j+t>n){
tak=false;
break;
}
cur+=ta;
dih[j+t]-=ta;
}
}
if(tak){
cout<<t;
return 0;
}
}
cout<<1;
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 | #include <bits/stdc++.h> using namespace std; #include <vector> #include <algorithm> #include <cmath> static long long dih[100001]; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int n; cin>>n; vector<int>tab(n); long long a=0; for(int i=0;i<n;i++){ cin>>tab[i]; a+=tab[i]; } for(int i=n;i>=2;i--){ if(a%i!=0) continue; int t=i; memset(dih,0,sizeof(long long)*(n+1)); long long cur=0; bool tak=true; for(int j=0;j<n;j++){ cur+=dih[j]; if(tab[j]<cur){ tak=false; break; } long long ta=tab[j]-cur; if(ta>0){ if(j+t>n){ tak=false; break; } cur+=ta; dih[j+t]-=ta; } } if(tak){ cout<<t; return 0; } } cout<<1; return 0; } |
English