#include <iostream>
#define MAXN 100000
using namespace std;
int a[MAXN];
int tmp[MAXN];
int k_valid[MAXN+1];
bool is_k_valid(int n, int k) {
for (int i=0; i < n; i++)
tmp[i] = a[i];
for (int i=0; i < n; i++) {
if (tmp[i] > 0) {
int w = tmp[i];
if (i + k - 1 >= n)
return false;
for (int j=i; j < i+k; j++)
tmp[j] -= w;
}
else if (tmp[i] < 0)
return false;
}
return true;
}
int main () {
int n;
cin >> n;
for (int i=0; i < n; i++)
cin >> a[i];
int res = 1;
for (int i=2; i <= n; i++)
k_valid[i] = 1;
for (int k=2; k <= n; k++)
if (k_valid[k]) {
if (is_k_valid(n, k))
res = k;
else
for (int i=2*k; i <= n; i += k)
k_valid[i] = 0;
}
cout << res << '\n';
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 <iostream> #define MAXN 100000 using namespace std; int a[MAXN]; int tmp[MAXN]; int k_valid[MAXN+1]; bool is_k_valid(int n, int k) { for (int i=0; i < n; i++) tmp[i] = a[i]; for (int i=0; i < n; i++) { if (tmp[i] > 0) { int w = tmp[i]; if (i + k - 1 >= n) return false; for (int j=i; j < i+k; j++) tmp[j] -= w; } else if (tmp[i] < 0) return false; } return true; } int main () { int n; cin >> n; for (int i=0; i < n; i++) cin >> a[i]; int res = 1; for (int i=2; i <= n; i++) k_valid[i] = 1; for (int k=2; k <= n; k++) if (k_valid[k]) { if (is_k_valid(n, k)) res = k; else for (int i=2*k; i <= n; i += k) k_valid[i] = 0; } cout << res << '\n'; return 0; } |
English