Niestety, nie byliśmy w stanie w pełni poprawnie wyświetlić tego pliku, ponieważ nie jest zakodowany w UTF-8.
Możesz pobrać ten plik i spróbować otworzyć go samodzielnie.
#include <iostream>
#include <cmath>
using namespace std;
const int MAX = 1000000;
int nominaly [MAX][3]; // 0 - nomina� pocz�tkowy, 1 - strata w du�ym cyklu, 2 - delta
bool wyniki [MAX];
bool nieTrzebaSprawdzac [MAX];
int NWD(int a, int b)
{
if(a!=b)
return NWD(a>b?a-b:a,b>a?b-a:b);
return a;
}
int main () {
ios_base::sync_with_stdio (false);
int n,m,cykle; cin>>n;
for (int i = 0; i < n; ++i) {
cin>>nominaly[i][0];
nominaly[i][2] = nominaly[i][0];
}
cin>>m;
char input;
for (int i = 0; i < m; ++i) {
cin>>input;
if (input == 'P')
wyniki[i] = false;
else
wyniki[i] = true;
}
long long int NWW = n * m / NWD (n,m);
//cout<<NWW<<endl;
for (long long int i = 0; i < NWW; ++i) {
if (wyniki[i%m] == true) {
++nominaly[i%n][0];
}
else {
--nominaly[i%n][0];
}
if (nominaly[i%n][0] < nominaly[i%n][2]) {
nominaly[i%n][2] = nominaly[i%n][0];
}
if (nominaly[i%n][0] == 0) {
cout<<i+1;
return 0;
}
//
if (wyniki[i%m] == true) {
++nominaly[i%n][1];
}
else {
--nominaly[i%n][1];
}
//
}
bool nieskonczone = true; //za�.
for (int i = 0; i < n; ++i) {
if (nominaly[i][1] < 0) {
nieskonczone = false;
}
else {
nieTrzebaSprawdzac[i] == true;
}
nominaly[i][2] = -1 * (nominaly[i][0] - nominaly[i][1] - nominaly[i][2]);
}
if (nieskonczone == true) {
cout<<-1;
return 0;
}
cykle = 1;
while (true) {
for (int i = 0; i < n; ++i) {
if (nieTrzebaSprawdzac[i] == false) {
if (nominaly[i][0] + nominaly[i][2] <= 0) {
cout<<cykle*NWW + i + 1;
cin.get(),cin.get();
return 0;
}
nominaly[i][0] += nominaly[i][1];
}
}
++cykle;
}
//cin.get(),cin.get();
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 | #include <iostream> #include <cmath> using namespace std; const int MAX = 1000000; int nominaly [MAX][3]; // 0 - nomina� pocz�tkowy, 1 - strata w du�ym cyklu, 2 - delta bool wyniki [MAX]; bool nieTrzebaSprawdzac [MAX]; int NWD(int a, int b) { if(a!=b) return NWD(a>b?a-b:a,b>a?b-a:b); return a; } int main () { ios_base::sync_with_stdio (false); int n,m,cykle; cin>>n; for (int i = 0; i < n; ++i) { cin>>nominaly[i][0]; nominaly[i][2] = nominaly[i][0]; } cin>>m; char input; for (int i = 0; i < m; ++i) { cin>>input; if (input == 'P') wyniki[i] = false; else wyniki[i] = true; } long long int NWW = n * m / NWD (n,m); //cout<<NWW<<endl; for (long long int i = 0; i < NWW; ++i) { if (wyniki[i%m] == true) { ++nominaly[i%n][0]; } else { --nominaly[i%n][0]; } if (nominaly[i%n][0] < nominaly[i%n][2]) { nominaly[i%n][2] = nominaly[i%n][0]; } if (nominaly[i%n][0] == 0) { cout<<i+1; return 0; } // if (wyniki[i%m] == true) { ++nominaly[i%n][1]; } else { --nominaly[i%n][1]; } // } bool nieskonczone = true; //za�. for (int i = 0; i < n; ++i) { if (nominaly[i][1] < 0) { nieskonczone = false; } else { nieTrzebaSprawdzac[i] == true; } nominaly[i][2] = -1 * (nominaly[i][0] - nominaly[i][1] - nominaly[i][2]); } if (nieskonczone == true) { cout<<-1; return 0; } cykle = 1; while (true) { for (int i = 0; i < n; ++i) { if (nieTrzebaSprawdzac[i] == false) { if (nominaly[i][0] + nominaly[i][2] <= 0) { cout<<cykle*NWW + i + 1; cin.get(),cin.get(); return 0; } nominaly[i][0] += nominaly[i][1]; } } ++cykle; } //cin.get(),cin.get(); return 0; } |
English