#include <bits/stdc++.h>
using namespace std;
const int mxn = 100005;
vector<long long> pro;
long long arr[mxn];
long long fin[mxn];
long long sum;
int n;
inline bool check(long long k){
long long c = 0;
memset(fin, 0, mxn*8);
for (long long i = 0; i < n; i++){
c-=fin[i];
fin[min(i+k, mxn-1ll)] = (arr[i]-c);
if (arr[i] - c < 0 || (fin[min(i+k, mxn-1ll)] && i + k > n))
return 0;
c = arr[i];
}
return 1;
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n;
for (int i = 0; i < n; i++){
cin >> arr[i];
sum+=arr[i];
}
for (long long i = 1; i * i <= sum; i++){
if (!(sum % i)){
pro.push_back(i);
if (i != sum/i)
pro.push_back(sum/i);
}
}
sort(pro.begin(), pro.end());
for (int i = pro.size()-1; i >= 0; i--){
if (!check(pro[i]))
continue;
cout << pro[i] << '\n';
return 0;
}
assert(false);
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 | #include <bits/stdc++.h> using namespace std; const int mxn = 100005; vector<long long> pro; long long arr[mxn]; long long fin[mxn]; long long sum; int n; inline bool check(long long k){ long long c = 0; memset(fin, 0, mxn*8); for (long long i = 0; i < n; i++){ c-=fin[i]; fin[min(i+k, mxn-1ll)] = (arr[i]-c); if (arr[i] - c < 0 || (fin[min(i+k, mxn-1ll)] && i + k > n)) return 0; c = arr[i]; } return 1; } int main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); cin >> n; for (int i = 0; i < n; i++){ cin >> arr[i]; sum+=arr[i]; } for (long long i = 1; i * i <= sum; i++){ if (!(sum % i)){ pro.push_back(i); if (i != sum/i) pro.push_back(sum/i); } } sort(pro.begin(), pro.end()); for (int i = pro.size()-1; i >= 0; i--){ if (!check(pro[i])) continue; cout << pro[i] << '\n'; return 0; } assert(false); return 0; } |
English