#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define st first
#define nd second
#define pii pair<int,int>
#define pb push_back
#define pp pop_back
#define si size
#define int ll
#define V vector
#define pf push_front
#define ppf pop_front
#define fr front
#define ba back
;
#define cerr if(0) cerr
vector<int> v;
int T[200005];
int n;
bool solve(int k){
int cur=0;
for(int i=0;i<n-k+1;i++){
cur+=T[i];
int a=v[i]-cur;
if(a<0)return 0;
T[i]+=a;
T[i+k]-=a;
cur+=a;
}
cur=0;
for(int i=0;i<n;i++){
cur+=T[i];
if(cur!=v[i])return 0;
}
cur+=T[n];
return !cur;
}
void clr(){
for(int i=0;i<2*n;i++)T[i]=0;
}
signed main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cin>>n;
v.resize(n);
int sum=0;
for(int i=0;i<n;i++)cin>>v[i];
for(int i:v)sum+=i;
for(int i=n;i>0;i--){
if(sum%i)continue;
if(solve(i)){
cout<<i<<'\n';
return 0;
}
clr();
}
// cout<<solve(3)<<'\n';
}
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 | #include <bits/stdc++.h> using namespace std; #define ll long long #define st first #define nd second #define pii pair<int,int> #define pb push_back #define pp pop_back #define si size #define int ll #define V vector #define pf push_front #define ppf pop_front #define fr front #define ba back ; #define cerr if(0) cerr vector<int> v; int T[200005]; int n; bool solve(int k){ int cur=0; for(int i=0;i<n-k+1;i++){ cur+=T[i]; int a=v[i]-cur; if(a<0)return 0; T[i]+=a; T[i+k]-=a; cur+=a; } cur=0; for(int i=0;i<n;i++){ cur+=T[i]; if(cur!=v[i])return 0; } cur+=T[n]; return !cur; } void clr(){ for(int i=0;i<2*n;i++)T[i]=0; } signed main(){ ios_base::sync_with_stdio(0); cin.tie(0); cin>>n; v.resize(n); int sum=0; for(int i=0;i<n;i++)cin>>v[i]; for(int i:v)sum+=i; for(int i=n;i>0;i--){ if(sum%i)continue; if(solve(i)){ cout<<i<<'\n'; return 0; } clr(); } // cout<<solve(3)<<'\n'; } |
English