#include<iostream>
#include<cstdio>
using namespace std;
#define MX 1000020
#define int long long
int t[MX];
int w[MX];
int p[MX];
int q[MX];
int nwd(int a,int b){
if(a%b==0) return b;
return nwd(b,a%b);
}
#define int int
int main(){
#define int long long
int n,m;
int i;
cin>>n;
char ch;
for(i=1;i<=n;++i){
cin>>t[i];
q[i]=t[i];
}
cin>>m;
for(i=1;i<=m;++i){
cin>>ch;
if(ch=='W'){
w[i]=1;
}
else{
w[i]=-1;
}
}
int nww=(n*m)/nwd(n,m);
//printf("nww=%d\n",nww);
#ifdef druk
for(i=1;i<=n;++i){
printf("%d ",t[i]);
}
printf("\n");
for(i=1;i<=m;++i){
printf("%c ",w[i]);
}
#endif
int u=1;
int d=1;
for(i=1;i<=nww;++i){
q[u]+=w[d];
//printf("q[%d]=%d\n",u,q[u]);
if(q[u]==0){
printf("%lld",i);
return 0;
}
++u;
++d;
if(u>n)u-=n;
if(d>m)d-=m;
}
int da=0;
for(i=1;i<=n;++i){
// printf("q[%d]=%d\n",i,q[i]);
if(q[i]<t[i]) da=1;
}
if(da==0){
printf("-1");
return 0;
}
//printf("=%d %d\n",u,d);
int wyn=nww;
while(1){
++wyn;
q[u]+=w[d];
if(q[u]==0){
printf("%lld",wyn);
return 0;
}
++u;
++d;
if(u>n)u-=n;
if(d>m)d-=m;
}
}
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 88 89 90 91 | #include<iostream> #include<cstdio> using namespace std; #define MX 1000020 #define int long long int t[MX]; int w[MX]; int p[MX]; int q[MX]; int nwd(int a,int b){ if(a%b==0) return b; return nwd(b,a%b); } #define int int int main(){ #define int long long int n,m; int i; cin>>n; char ch; for(i=1;i<=n;++i){ cin>>t[i]; q[i]=t[i]; } cin>>m; for(i=1;i<=m;++i){ cin>>ch; if(ch=='W'){ w[i]=1; } else{ w[i]=-1; } } int nww=(n*m)/nwd(n,m); //printf("nww=%d\n",nww); #ifdef druk for(i=1;i<=n;++i){ printf("%d ",t[i]); } printf("\n"); for(i=1;i<=m;++i){ printf("%c ",w[i]); } #endif int u=1; int d=1; for(i=1;i<=nww;++i){ q[u]+=w[d]; //printf("q[%d]=%d\n",u,q[u]); if(q[u]==0){ printf("%lld",i); return 0; } ++u; ++d; if(u>n)u-=n; if(d>m)d-=m; } int da=0; for(i=1;i<=n;++i){ // printf("q[%d]=%d\n",i,q[i]); if(q[i]<t[i]) da=1; } if(da==0){ printf("-1"); return 0; } //printf("=%d %d\n",u,d); int wyn=nww; while(1){ ++wyn; q[u]+=w[d]; if(q[u]==0){ printf("%lld",wyn); return 0; } ++u; ++d; if(u>n)u-=n; if(d>m)d-=m; } } |
English