#include <bits/stdc++.h>
using namespace std;
#define int long long
const int mod = 1e9+7;
void solve() {
int n; cin >> n;
vector<int>a(n);
for (int i = 0; i < n; i++) cin >> a[i];
int ss = accumulate(a.begin(), a.end(), 0ll);
vector<int>divs;
for (int i = 1; i * i <= ss; i++) {
if (ss % i == 0) {
divs.emplace_back(i);
if (i * i != ss) divs.emplace_back(ss / i);
}
}
vector<int>otwarte(n);
int ans = 0;
for (auto k: divs) {
if (k > n) continue;
// if (k != 3) continue;
int s = 0;
bool ok = 1;
// cerr << k << "\n";
for (int i = 0; i < n; i++) {
if (i - k >= 0) {
s -= otwarte[i - k];
}
if (s > a[i]) {
ok = 0;
break;
}
// cerr << a[i] - s << " ";
otwarte[i] = a[i] - s;
s += a[i] - s;
}
// cerr << endl;
if (ok == 1 && s == otwarte[n - k]) {
ans = max(ans, k);
}
}
cout << ans << endl;
}
int32_t main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
solve();
}
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 | #include <bits/stdc++.h> using namespace std; #define int long long const int mod = 1e9+7; void solve() { int n; cin >> n; vector<int>a(n); for (int i = 0; i < n; i++) cin >> a[i]; int ss = accumulate(a.begin(), a.end(), 0ll); vector<int>divs; for (int i = 1; i * i <= ss; i++) { if (ss % i == 0) { divs.emplace_back(i); if (i * i != ss) divs.emplace_back(ss / i); } } vector<int>otwarte(n); int ans = 0; for (auto k: divs) { if (k > n) continue; // if (k != 3) continue; int s = 0; bool ok = 1; // cerr << k << "\n"; for (int i = 0; i < n; i++) { if (i - k >= 0) { s -= otwarte[i - k]; } if (s > a[i]) { ok = 0; break; } // cerr << a[i] - s << " "; otwarte[i] = a[i] - s; s += a[i] - s; } // cerr << endl; if (ok == 1 && s == otwarte[n - k]) { ans = max(ans, k); } } cout << ans << endl; } int32_t main() { ios_base::sync_with_stdio(0); cin.tie(0); solve(); } |
English