#include<bits/stdc++.h>
using namespace std;
int tab[100007];
vector<int> dzielniki;
int pref[1000007];
bool test(int n, int dlugosc)
{
int teraz = 0, roznica;
for(int i = 0; i <= n; i++)
{
pref[i] = 0;
}
for(int i = 0; i < n; i++)
{
teraz += pref[i];
if(tab[i] < teraz)
{
return 0;
}
roznica = tab[i] - teraz;
if(roznica)
{
teraz += roznica;
if(i + dlugosc > n)
{
return 0;
}
pref[i + dlugosc] -= roznica;
}
}
return 1;
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n, pierw;
long long suma = 0;
cin >> n;
for(int i = 0; i < n; i++)
{
cin >> tab[i];
suma += tab[i];
}
pierw = sqrtl(suma);
for(int i = 1; i <= pierw; i++)
{
if(suma % i == 0)
{
dzielniki.push_back(i);
if(i != pierw)
{
dzielniki.push_back(suma / i);
}
}
}
sort(dzielniki.begin(), dzielniki.end());
for(int i = dzielniki.size() - 1; i >= 0; i--)
{
if(dzielniki[i] > n)
{
continue;
}
if(test(n, dzielniki[i]))
{
cout << dzielniki[i];
return 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 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 71 72 73 74 75 76 77 | #include<bits/stdc++.h> using namespace std; int tab[100007]; vector<int> dzielniki; int pref[1000007]; bool test(int n, int dlugosc) { int teraz = 0, roznica; for(int i = 0; i <= n; i++) { pref[i] = 0; } for(int i = 0; i < n; i++) { teraz += pref[i]; if(tab[i] < teraz) { return 0; } roznica = tab[i] - teraz; if(roznica) { teraz += roznica; if(i + dlugosc > n) { return 0; } pref[i + dlugosc] -= roznica; } } return 1; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, pierw; long long suma = 0; cin >> n; for(int i = 0; i < n; i++) { cin >> tab[i]; suma += tab[i]; } pierw = sqrtl(suma); for(int i = 1; i <= pierw; i++) { if(suma % i == 0) { dzielniki.push_back(i); if(i != pierw) { dzielniki.push_back(suma / i); } } } sort(dzielniki.begin(), dzielniki.end()); for(int i = dzielniki.size() - 1; i >= 0; i--) { if(dzielniki[i] > n) { continue; } if(test(n, dzielniki[i])) { cout << dzielniki[i]; return 0; } } return 0; } |
English