#include<iostream> #include<string> using namespace std; int nww(int n, int m){ if(m>n){ int temp=m; m=n; n=temp; }; int m0=m; while(m%n!=0){ m=m+m0; }; return m; } int rozwiaz(int n, int m, int a[], int w[]){ bool czy_skonczony=0; int b[n]; for(int i=0;i<n;i++) b[i]=a[i]; int k=0; for(int i=0;i<nww(n,m);i++){ a[k]=a[k]+w[i%m]; if(a[k]==0) return i+1; if(k+1==n) k=0; else k++; }; for(int i=0;i<n;i++) if(a[i]<b[i]){ czy_skonczony=1; break; }; if(czy_skonczony){ k=0; for(int i=0;i<m*1000000;i++){ a[k]=a[k]+w[i%m]; if(a[k]==0) return nww(n,m)+i+1; if(k+1==n) k=0; else k++; }; } else return -1; } int main(){ int n,m; int a[n]; string w,x; int b[m]; cin>>n; cin.ignore(); for(int i=0;i<n;i++) cin>>a[i]; cin>>m; cin.ignore(); getline(cin,w); for(int i=0;i<m;i++){ if(w[i]=='W') b[i]=1; else b[i]=-1; }; cout<<rozwiaz(n,m,a,b); 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 | #include<iostream> #include<string> using namespace std; int nww(int n, int m){ if(m>n){ int temp=m; m=n; n=temp; }; int m0=m; while(m%n!=0){ m=m+m0; }; return m; } int rozwiaz(int n, int m, int a[], int w[]){ bool czy_skonczony=0; int b[n]; for(int i=0;i<n;i++) b[i]=a[i]; int k=0; for(int i=0;i<nww(n,m);i++){ a[k]=a[k]+w[i%m]; if(a[k]==0) return i+1; if(k+1==n) k=0; else k++; }; for(int i=0;i<n;i++) if(a[i]<b[i]){ czy_skonczony=1; break; }; if(czy_skonczony){ k=0; for(int i=0;i<m*1000000;i++){ a[k]=a[k]+w[i%m]; if(a[k]==0) return nww(n,m)+i+1; if(k+1==n) k=0; else k++; }; } else return -1; } int main(){ int n,m; int a[n]; string w,x; int b[m]; cin>>n; cin.ignore(); for(int i=0;i<n;i++) cin>>a[i]; cin>>m; cin.ignore(); getline(cin,w); for(int i=0;i<m;i++){ if(w[i]=='W') b[i]=1; else b[i]=-1; }; cout<<rozwiaz(n,m,a,b); return 0; } |