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; } |