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> using namespace std; int n,m,resztan,resztam; char znak; long long int najmncykl; long long int NWW,gra,i; long long int kolega[1000001]={};//ile pieniedzy char wygrana[1000001]={}; long long int calkwygrana[1000001]={}; long long int cykli[10000001]={}; int NWD(int a, long int b) { int pom; while(b!=0) { pom = b; b = a%b; a = pom; } return a; } int main() { //wczytanie ios_base::sync_with_stdio(0); //zdecydowanie skraca operacje wejscia wyjscia-wylaczenie synchronizacji strumienia cin>>n; for (i=0;i<=n-1;i++) cin>>kolega[i]; cin>>m; for (i=0;i<=m-1;i++) {cin>>znak; if (znak=='W') wygrana[i]=1; else wygrana[i]=-1; } //najmniejsza wspolna wielokrotnosc NWW=n/NWD(n,m)*m; // jakie beda bezwzgl�dne (bez uwzgl�dnienia pocz�tkowych pieni�dzy) wygrane po calym cyklu gier do { resztan=gra%n;resztam=gra%m; calkwygrana[resztan]=calkwygrana[resztan]+wygrana[resztam]; gra++; } while (gra<NWW); // ile cykli graj� poszczeg�lni gracze i kt�ry gracz ko�czy w najkr�tszym cyklu najmncykl=9000000000000000005LL; for (i=0;i<=n-1;i++) { cykli[i]=(-1)*kolega[i]/calkwygrana[i];if ((cykli[i]>0)&&(cykli[i]<najmncykl)) najmncykl=cykli[i]; } if (najmncykl!=9000000000000000005LL) //ile wszyscy maja po skonczeniu cyklu o jeden mniejszego ni� najkrotszy {for (i=0;i<=n-1;i++) kolega[i]=kolega[i]+(najmncykl-1)*calkwygrana[i]; //ostatni cykl gra=0; do { resztan=gra%n;resztam=gra%m; kolega[resztan]=kolega[resztan]+wygrana[resztam]; gra++; } while (kolega[resztan]>0); gra=(najmncykl-1)*NWW+gra; cout<<gra; } else cout<<-1; 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 | #include <iostream> using namespace std; int n,m,resztan,resztam; char znak; long long int najmncykl; long long int NWW,gra,i; long long int kolega[1000001]={};//ile pieniedzy char wygrana[1000001]={}; long long int calkwygrana[1000001]={}; long long int cykli[10000001]={}; int NWD(int a, long int b) { int pom; while(b!=0) { pom = b; b = a%b; a = pom; } return a; } int main() { //wczytanie ios_base::sync_with_stdio(0); //zdecydowanie skraca operacje wejscia wyjscia-wylaczenie synchronizacji strumienia cin>>n; for (i=0;i<=n-1;i++) cin>>kolega[i]; cin>>m; for (i=0;i<=m-1;i++) {cin>>znak; if (znak=='W') wygrana[i]=1; else wygrana[i]=-1; } //najmniejsza wspolna wielokrotnosc NWW=n/NWD(n,m)*m; // jakie beda bezwzgl�dne (bez uwzgl�dnienia pocz�tkowych pieni�dzy) wygrane po calym cyklu gier do { resztan=gra%n;resztam=gra%m; calkwygrana[resztan]=calkwygrana[resztan]+wygrana[resztam]; gra++; } while (gra<NWW); // ile cykli graj� poszczeg�lni gracze i kt�ry gracz ko�czy w najkr�tszym cyklu najmncykl=9000000000000000005LL; for (i=0;i<=n-1;i++) { cykli[i]=(-1)*kolega[i]/calkwygrana[i];if ((cykli[i]>0)&&(cykli[i]<najmncykl)) najmncykl=cykli[i]; } if (najmncykl!=9000000000000000005LL) //ile wszyscy maja po skonczeniu cyklu o jeden mniejszego ni� najkrotszy {for (i=0;i<=n-1;i++) kolega[i]=kolega[i]+(najmncykl-1)*calkwygrana[i]; //ostatni cykl gra=0; do { resztan=gra%n;resztam=gra%m; kolega[resztan]=kolega[resztan]+wygrana[resztam]; gra++; } while (kolega[resztan]>0); gra=(najmncykl-1)*NWW+gra; cout<<gra; } else cout<<-1; return 0; } |