#include <bits/stdc++.h>
using namespace std;
vector<long long> dzielniki(long long n, int limit) {
vector<long long> a, b;
a.push_back(1);
if (n <= limit) b.push_back(n);
long long d = 2;
while (d * d <= n && d <= limit) {
if (n % d == 0) {
a.push_back(d);
long long e = n / d;
if (e != d && e <= limit) {
b.push_back(e);
}
}
++d;
}
// return b + reversed(a)
vector<long long> res = b;
for (int i = (int)a.size() - 1; i >= 0; --i)
res.push_back(a[i]);
return res;
}
bool test_d(long long d, const vector<long long> &a, long long suma, int n) {
long long s = 0;
long long k = 0;
vector<long long> K(n + 1, 0);
for (int i = 0; i <= n - (int)d; ++i) {
k -= K[i];
long long ak = a[i] - k;
if (ak < 0) return false;
k += ak;
s += ak * d;
K[i + d] = ak;
}
if (s != suma) return false;
for (int i = n - (int)d + 1; i < n; ++i) {
k -= K[i];
long long ak = a[i] - k;
if (ak != 0) return false;
}
return true;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
if (!(cin >> n)) return 0;
vector<long long> a(n);
for (int i = 0; i < n; ++i) cin >> a[i];
long long suma = 0;
for (long long x : a) suma += x;
vector<long long> D = dzielniki(suma, n);
for (long long d : D) {
if (test_d(d, a, suma, n)) {
cout << d << "\n";
break;
}
}
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 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | #include <bits/stdc++.h> using namespace std; vector<long long> dzielniki(long long n, int limit) { vector<long long> a, b; a.push_back(1); if (n <= limit) b.push_back(n); long long d = 2; while (d * d <= n && d <= limit) { if (n % d == 0) { a.push_back(d); long long e = n / d; if (e != d && e <= limit) { b.push_back(e); } } ++d; } // return b + reversed(a) vector<long long> res = b; for (int i = (int)a.size() - 1; i >= 0; --i) res.push_back(a[i]); return res; } bool test_d(long long d, const vector<long long> &a, long long suma, int n) { long long s = 0; long long k = 0; vector<long long> K(n + 1, 0); for (int i = 0; i <= n - (int)d; ++i) { k -= K[i]; long long ak = a[i] - k; if (ak < 0) return false; k += ak; s += ak * d; K[i + d] = ak; } if (s != suma) return false; for (int i = n - (int)d + 1; i < n; ++i) { k -= K[i]; long long ak = a[i] - k; if (ak != 0) return false; } return true; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n; if (!(cin >> n)) return 0; vector<long long> a(n); for (int i = 0; i < n; ++i) cin >> a[i]; long long suma = 0; for (long long x : a) suma += x; vector<long long> D = dzielniki(suma, n); for (long long d : D) { if (test_d(d, a, suma, n)) { cout << d << "\n"; break; } } return 0; } |
English