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
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#include <stdio.h>
#include <vector>

using namespace std;

int gcd(int m, int n) {
  int tmp;
  while(m) { tmp = m; m = n % m; n = tmp; }       
  return n;
}
 
int lcm(int m, int n) {
  return m / gcd(m, n) * n;
}

int oszczednosci[1000000];
bool wygrana[1000000];
vector<int> indexes;
vector<int>::iterator it;

int main() {
  int n; //ilosc kolegow
  int x;
  char w;
  scanf("%d", &n);
  for (int i=0; i<n; ++i) {
    scanf("%d", &x);
    oszczednosci[i]=x;
  }
  int m;
  scanf("%d\n", &m);
  for (int i=0; i<m; ++i) {
    scanf("%c", &w);
    wygrana[i]=(w=='W');
    ////printf("%c %d ASD\n", w, i);
  }
  
  
  for (int i=0; i<lcm(n,m); i+=n) { //przekroczona zmienna
    indexes.push_back(i%m);
    //printf("%d\n", (i%m));
  }
  
  int wygrywajacych=0;
  int moment_przegrania=-2;
  int moment;
  int pelnych_cykli;
  int person_index,index,smallest_in_cycle,sum_in_cycle;
  for (int i=0; i<n; ++i) {
    person_index=i%m;
    sum_in_cycle=0;
    smallest_in_cycle=0;
    for (it=indexes.begin(); it<indexes.end(); it++) {
      index = (person_index+*it)%m;
      //printf("index %d\n", index);
      
      if (wygrana[index]) {
	sum_in_cycle+=1;
      }
      else {
	sum_in_cycle-=1;
      }
      
      if (sum_in_cycle<smallest_in_cycle) smallest_in_cycle=sum_in_cycle; 
    }
    
    if (smallest_in_cycle+oszczednosci[i]>=0 && sum_in_cycle>=0) {
      //zawsze wygrywa
      wygrywajacych+=1;
      continue;
    }
    
    //obliczenie momentu przegrania
    pelnych_cykli = (oszczednosci[i] + smallest_in_cycle)/(-sum_in_cycle);
    moment=i+pelnych_cykli*n*indexes.size()-n;
    //printf("moment %d\n", moment);
    //printf("oszczednosci[i] %d\n", oszczednosci[i]);
    //printf("sum_in_cycle %d\n", sum_in_cycle);
    //printf("indexes.size() %d\n", indexes.size());
    oszczednosci[i]+=pelnych_cykli*sum_in_cycle;
    //printf("oszczednosci[i] %d\n", oszczednosci[i]);
    
    for (it=indexes.begin(); it<indexes.end(); it++) { //czy tu powinny byc dwa cykle?
      index = (person_index+*it)%m;
       if (wygrana[index]) {
	oszczednosci[i]+=1;
	//printf("W\n");
      }
      else {
	oszczednosci[i]-=1;
	//printf("P\n");
      }
      moment+=n;
      //printf("index %d\n", index);
      //printf("oszczednosci[i] %d\n", oszczednosci[i]);
      //printf("moment %d\n", moment);
      
      if (oszczednosci[i]==0) break;
    }
    //printf("X moment %d\n", moment);
    //printf("X oszczednosci[i] %d\n", oszczednosci[i]);
    
    if (moment_przegrania==-2 || moment<moment_przegrania) moment_przegrania=moment;
    
  }
  
  printf("%d", moment_przegrania+1);
  
  
  
  
  
  return 0;
}