#include <cstdio> #include <vector> using namespace std; typedef long long int LL; int nwd(int a, int b){ if(b==0) return a; return nwd(b,a%b); } int n,m; vector<int> cykl_kasyna; int main(){ scanf("%d",&n); vector<int> boys(n); for(int i=0;i<n;++i) scanf("%d",&boys[i]); scanf("%d ",&m); cykl_kasyna.resize(m); for(int i=0;i<m;++i){ char c; scanf("%c",&c); if(c=='W') cykl_kasyna[i]=1; else cykl_kasyna[i]=-1; } vector<int> wypadkowa(n,0); //unsigned long long int step=0; for(int i=0;i<n*m;++i){ wypadkowa[i%n] += cykl_kasyna[i%m]; if(boys[i%n]+wypadkowa[i%n]<=0){ printf("%d\n",i+1); return 0; } } bool none = true; vector<LL> steps(n,-1); for(int i=0;i<n;++i){ if(wypadkowa[i]<0){ none = false; steps[i] = -LL(boys[i])/wypadkowa[i]; boys[i] -= -steps[i]*wypadkowa[i]; steps[i]*=n*m; } } for(int i=0;i<n*m;++i){ boys[i%n] += cykl_kasyna[i%m]; if(boys[i%n]<=0){ printf("%llu\n",steps[i%n]+i+1); return 0; } } if(none){ puts("-1"); } }
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> #include <vector> using namespace std; typedef long long int LL; int nwd(int a, int b){ if(b==0) return a; return nwd(b,a%b); } int n,m; vector<int> cykl_kasyna; int main(){ scanf("%d",&n); vector<int> boys(n); for(int i=0;i<n;++i) scanf("%d",&boys[i]); scanf("%d ",&m); cykl_kasyna.resize(m); for(int i=0;i<m;++i){ char c; scanf("%c",&c); if(c=='W') cykl_kasyna[i]=1; else cykl_kasyna[i]=-1; } vector<int> wypadkowa(n,0); //unsigned long long int step=0; for(int i=0;i<n*m;++i){ wypadkowa[i%n] += cykl_kasyna[i%m]; if(boys[i%n]+wypadkowa[i%n]<=0){ printf("%d\n",i+1); return 0; } } bool none = true; vector<LL> steps(n,-1); for(int i=0;i<n;++i){ if(wypadkowa[i]<0){ none = false; steps[i] = -LL(boys[i])/wypadkowa[i]; boys[i] -= -steps[i]*wypadkowa[i]; steps[i]*=n*m; } } for(int i=0;i<n*m;++i){ boys[i%n] += cykl_kasyna[i%m]; if(boys[i%n]<=0){ printf("%llu\n",steps[i%n]+i+1); return 0; } } if(none){ puts("-1"); } } |