#include <iostream>
using namespace std;
//long ileTestow;
//long n, k;
const long maks = 100000;
long ileSegmentow;
long segmenty[maks];
long segmentyKopia[maks];
long ileBursztynow = 0;
/*void odpowiedzPalindrom()
{
if(k*2<n) cout << "NIE" << endl;
else
{
for(long i=0; i<k; i++) cout <<"A";
for(long i=k; i<n; i++) cout <<"P";
cout << endl;
}
}
void czytajPalindrom()
{
cin >> ileTestow;
for(long i=0; i<ileTestow; i++)
{
cin >> n >> k;
odpowiedz();
}
}
*/
void czytajBursztyny()
{
cin >> ileSegmentow;
long ile;
for(long i=0; i<ileSegmentow; i++)
{
cin >> ile;
segmenty[i] = ile;
ileBursztynow += ile;
}
}
void kopiujBursztyny()
{
for(long i=0; i<ileSegmentow; i++)
segmentyKopia[i] = segmenty[i];
}
void wyswietlKopie()
{
for(long i=0; i<ileSegmentow; i++)
cout << segmentyKopia[i] << ", ";
cout << endl;
}
bool sprawdzBursztyny(long dlFali)
{
kopiujBursztyny();
// cout << "sprawdzam: " << dlFali << endl;
for(long i=0; i<ileSegmentow; i++)
{
// cout << "sprawdzam: i" << i << endl;
// wyswietlKopie();
if(segmentyKopia[i] < 0)
{
// cout << "false 1: " << endl;
return false;
}
else if(segmentyKopia[i]>0)
{
for(long j=i+dlFali-1; j>=i; j--)
{
// cout << "sprawdzam: i: " << i << ", j: " << j << " dl fali: " << dlFali <<endl;
// wyswietlKopie();
if(j>=ileSegmentow)
{
// cout << "false 2: " << endl;
return false;
}
segmentyKopia[j] -=segmentyKopia[i];
}
}
}
return true;
}
void obliczBursztyny()
{
for(long i=ileBursztynow/ileSegmentow; i>0; i--)
{
if(ileBursztynow%i==0)
{
if(sprawdzBursztyny(i))
{
cout << i << endl;
return;
}
}
}
}
int main()
{
czytajBursztyny();
obliczBursztyny();
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 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 | #include <iostream> using namespace std; //long ileTestow; //long n, k; const long maks = 100000; long ileSegmentow; long segmenty[maks]; long segmentyKopia[maks]; long ileBursztynow = 0; /*void odpowiedzPalindrom() { if(k*2<n) cout << "NIE" << endl; else { for(long i=0; i<k; i++) cout <<"A"; for(long i=k; i<n; i++) cout <<"P"; cout << endl; } } void czytajPalindrom() { cin >> ileTestow; for(long i=0; i<ileTestow; i++) { cin >> n >> k; odpowiedz(); } } */ void czytajBursztyny() { cin >> ileSegmentow; long ile; for(long i=0; i<ileSegmentow; i++) { cin >> ile; segmenty[i] = ile; ileBursztynow += ile; } } void kopiujBursztyny() { for(long i=0; i<ileSegmentow; i++) segmentyKopia[i] = segmenty[i]; } void wyswietlKopie() { for(long i=0; i<ileSegmentow; i++) cout << segmentyKopia[i] << ", "; cout << endl; } bool sprawdzBursztyny(long dlFali) { kopiujBursztyny(); // cout << "sprawdzam: " << dlFali << endl; for(long i=0; i<ileSegmentow; i++) { // cout << "sprawdzam: i" << i << endl; // wyswietlKopie(); if(segmentyKopia[i] < 0) { // cout << "false 1: " << endl; return false; } else if(segmentyKopia[i]>0) { for(long j=i+dlFali-1; j>=i; j--) { // cout << "sprawdzam: i: " << i << ", j: " << j << " dl fali: " << dlFali <<endl; // wyswietlKopie(); if(j>=ileSegmentow) { // cout << "false 2: " << endl; return false; } segmentyKopia[j] -=segmentyKopia[i]; } } } return true; } void obliczBursztyny() { for(long i=ileBursztynow/ileSegmentow; i>0; i--) { if(ileBursztynow%i==0) { if(sprawdzBursztyny(i)) { cout << i << endl; return; } } } } int main() { czytajBursztyny(); obliczBursztyny(); return 0; } |
English