#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"); } } |
English