#include<cstdio> long long n, c=0, d, nww=1, wyn=1000000000000000000; long long T[1000005]; long long w[1000005]; long long Tp[1000005]; char m; long long NWWf(long long a, long long b) { while(a!=0&&b!=0) { if(a>b) a=a%b; else b=b%a; } return n*d/(a > b ? a : b); } int main() { scanf("%lld", &n); for(long long i=0; i<n; i++) { scanf("%lld", &T[i]); Tp[i]=T[i]; } scanf("%lld\n", &d); for(long long i=0 ;i<d; i++) { scanf("%c",&m); if(m=='W')w[i]=1; else w[i]=-1; } nww=NWWf(n, d); //printf("%d",nww); for(long long i=0; i<nww; i+=d) { for(long long j=0; j<d; j++) { Tp[(i+j)%n]+=w[(i+j)%d]; //printf("%d %d %d %d\n", i+j,(i+j)%d, (i+j)%n, Tp[(i+j)%n]); if(Tp[(i+j)%n]==0) {printf("%lld\n", i+j+1); return 0;} } } for(long long i=0; i<n; i++) { int r=0; if(Tp[i]>=T[i]) continue; if(T[i]%Tp[i]!=0) r=1; if(wyn>T[i]/Tp[i]+r) wyn=T[i]/Tp[i]+r; } if(wyn==1000000000000000000) {printf("-1\n"); return 0;} printf("%lld", wyn); }
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 | #include<cstdio> long long n, c=0, d, nww=1, wyn=1000000000000000000; long long T[1000005]; long long w[1000005]; long long Tp[1000005]; char m; long long NWWf(long long a, long long b) { while(a!=0&&b!=0) { if(a>b) a=a%b; else b=b%a; } return n*d/(a > b ? a : b); } int main() { scanf("%lld", &n); for(long long i=0; i<n; i++) { scanf("%lld", &T[i]); Tp[i]=T[i]; } scanf("%lld\n", &d); for(long long i=0 ;i<d; i++) { scanf("%c",&m); if(m=='W')w[i]=1; else w[i]=-1; } nww=NWWf(n, d); //printf("%d",nww); for(long long i=0; i<nww; i+=d) { for(long long j=0; j<d; j++) { Tp[(i+j)%n]+=w[(i+j)%d]; //printf("%d %d %d %d\n", i+j,(i+j)%d, (i+j)%n, Tp[(i+j)%n]); if(Tp[(i+j)%n]==0) {printf("%lld\n", i+j+1); return 0;} } } for(long long i=0; i<n; i++) { int r=0; if(Tp[i]>=T[i]) continue; if(T[i]%Tp[i]!=0) r=1; if(wyn>T[i]/Tp[i]+r) wyn=T[i]/Tp[i]+r; } if(wyn==1000000000000000000) {printf("-1\n"); return 0;} printf("%lld", wyn); } |