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