#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
constexpr int N=1e5+5;
#define gc getchar_unlocked
#define pc putchar_unlocked
inline int read(){
int x=0; char c=gc();
while(!isdigit(c))c=gc();
while(isdigit(c))x=x*10+c-'0',c=gc();
return x;
}
void write(const int x){
if(x>9)write(x/10);
pc(x%10+'0');
}
int n,a[N],b[N],c[N];
int main(){
n=read();
for(int i=1;i<=n;i++)a[i]=read();
ll s=accumulate(a+1,a+1+n,0ll);
for(int d=n;d;d--)if(s%d==0){
fill_n(b+1,n+1,0),fill_n(c+1,n+1,0);
bool flag=1;
for(int i=1;i<=n;i++){
c[i]+=c[i-1];
if(c[i]>a[i]){flag=0;break;}
if(c[i]==a[i])continue;
if(i+d-1>n){flag=0;break;}
const int x=a[i]-c[i];
c[i+d]-=x,c[i]+=x;
}
if(flag)return printf("%d\n",d),0;
}
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 | #include<bits/stdc++.h> using namespace std; typedef long long ll; constexpr int N=1e5+5; #define gc getchar_unlocked #define pc putchar_unlocked inline int read(){ int x=0; char c=gc(); while(!isdigit(c))c=gc(); while(isdigit(c))x=x*10+c-'0',c=gc(); return x; } void write(const int x){ if(x>9)write(x/10); pc(x%10+'0'); } int n,a[N],b[N],c[N]; int main(){ n=read(); for(int i=1;i<=n;i++)a[i]=read(); ll s=accumulate(a+1,a+1+n,0ll); for(int d=n;d;d--)if(s%d==0){ fill_n(b+1,n+1,0),fill_n(c+1,n+1,0); bool flag=1; for(int i=1;i<=n;i++){ c[i]+=c[i-1]; if(c[i]>a[i]){flag=0;break;} if(c[i]==a[i])continue; if(i+d-1>n){flag=0;break;} const int x=a[i]-c[i]; c[i+d]-=x,c[i]+=x; } if(flag)return printf("%d\n",d),0; } return 0; } |
English