#include <iostream> using namespace std; int tab1[1000050]; bool sprawdzenie [1000050]; int tab2[1000050]; int n,k,nwd,it1,it2,cykle; char wczytaj; int Nwd ( int a, int b ){ if ( b == 0 ) return a; return Nwd( b, a % b ); } bool sprawdz (int n, int tab1[], int tab2[] ){ for ( int i = 0; i < n; i++) if ( tab2[i] < tab1[i] ) return true; return false; } int main (){ cin>>n; for ( int i = 0; i < n; i++) cin>> tab1[i]; cin>>k; for ( int i = 0; i < k; i++){ cin>>wczytaj; if ( wczytaj == 'W') sprawdzenie[i] = true; } for ( int i = 0; i < n; i++ )tab2[i] = tab1[i]; ( n > k )? nwd = Nwd ( n , k ) : nwd = Nwd ( k, n ); nwd = n/nwd*k; while ( 1 ) { if ( sprawdzenie [ it2 % k ] == true ) { tab2[ it1 % n ]++; it1++; it2++; cykle++; } else if ( sprawdzenie [ it2 % k ] == false ) { tab2[ it1 % n ]--; cykle++; if ( tab2[ it1 % n ] == 0 ) { cout<< cykle; return 0; } it1++; it2++; } if ( cykle == nwd ) if ( sprawdz ( n, tab1, tab2 ) == false ) { 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 | #include <iostream> using namespace std; int tab1[1000050]; bool sprawdzenie [1000050]; int tab2[1000050]; int n,k,nwd,it1,it2,cykle; char wczytaj; int Nwd ( int a, int b ){ if ( b == 0 ) return a; return Nwd( b, a % b ); } bool sprawdz (int n, int tab1[], int tab2[] ){ for ( int i = 0; i < n; i++) if ( tab2[i] < tab1[i] ) return true; return false; } int main (){ cin>>n; for ( int i = 0; i < n; i++) cin>> tab1[i]; cin>>k; for ( int i = 0; i < k; i++){ cin>>wczytaj; if ( wczytaj == 'W') sprawdzenie[i] = true; } for ( int i = 0; i < n; i++ )tab2[i] = tab1[i]; ( n > k )? nwd = Nwd ( n , k ) : nwd = Nwd ( k, n ); nwd = n/nwd*k; while ( 1 ) { if ( sprawdzenie [ it2 % k ] == true ) { tab2[ it1 % n ]++; it1++; it2++; cykle++; } else if ( sprawdzenie [ it2 % k ] == false ) { tab2[ it1 % n ]--; cykle++; if ( tab2[ it1 % n ] == 0 ) { cout<< cykle; return 0; } it1++; it2++; } if ( cykle == nwd ) if ( sprawdz ( n, tab1, tab2 ) == false ) { cout<<-1; return 0; } } } |