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
115
116
117
118
119
120
121
122
123
124
125
#include <cstdio>
#include <algorithm>

const long long int MAX = 1000001LL;

long long int n,m;

long long int gracze[MAX+1];
long long int kasa[MAX+1];
long long int lowest[MAX+1];
char wynikgry [MAX+1];

int main(){
	scanf("%lld", &n);
	for(int i = 0; i < n; ++i){
		scanf("%lld", &gracze[i]);
		kasa[i] = gracze[i];
		lowest[i] = 0;
	}
	scanf("%lld", &m);
	
	//for(int i = 0; i <= m; ++i){
		scanf("%s", wynikgry);
//	}

//::::Algo::::

	long long int nww = (n*m)/(std::__gcd(n,m)); 
//	printf("NWW: %lld\n", nww);
	long long int gracz, wynik;
	bool koniec = false;
	for(int i = 0; i < nww; ++i){
		gracz = i % n;
		wynik = i % m;
		if(wynikgry[wynik] == 'W'){
			kasa[gracz]++;
		}else{
			kasa[gracz]--;
		}
		if(kasa[gracz] == 0){
			//wynik:
			printf("%d", i+1);
			koniec = true;
			break;
		}else{
			if(lowest[gracz] < gracze[gracz] - kasa[gracz]) lowest[gracz] = gracze[gracz] - kasa[gracz];
		}
	}
	////debug:
//	printf("\n");
//	for(int i = 0; i < n; ++i){
//		printf("%lld ", kasa[i]);
//	}printf("\n");
	////
	if(!koniec){
		long long int min, reszta;
		for(int i = 0; i < n; ++i){
			gracz = i;
			if(gracze[gracz] > kasa[gracz]){
				long long int rk = (gracze[gracz]-kasa[gracz]);
				long long int mnoznik = 1;
				reszta = 0;
				while(kasa[gracz] > 0){
					if(kasa[gracz]-lowest[gracz]>0){
						mnoznik++;
						kasa[gracz]-= rk;
					}else{
						reszta = kasa[gracz];
						kasa[gracz] = 0;
					}
				}
			//	if(reszta == 0 && mnoznik >= 1) {
			//		mnoznik--;
			//		reszta+= rk;
			//	}
//				printf("gracz: %lld, reszta: %lld\n", gracze[gracz],reszta);
				if(reszta >= 0){
					//find(reszta):
					long long int tmp = nww/n;
					for(int j = gracz; j < nww; j+=n){
						if(wynikgry[j%m] == 'W'){
							reszta++;
						}else{
							reszta--;
						}
						if(reszta == 0){
							reszta = j;
							break;
						}
					}
				}
				//end find;
				gracze[gracz] = nww*mnoznik + reszta + 1;
			}else{
				gracze[gracz] = -1;
			}
		}
		min = 0;
		for(int i = 0; i < n; ++i){
			if(gracze[i]!= -1){
				if(gracze[min] == -1) {
					min = i;
				}
				else {
					if(gracze[min] > gracze[i]) {
						min = i;
					}
				}
			}
		}
		//wynik:
		printf("%lld", gracze[min]);
	}


//::::EndAlgo::::
//	printf("\n");
//	for(int i = 0; i < n; ++i){
//		printf("%lld ", gracze[i]);
//	}
///	printf("\n");
//	for(int i = 0; i < m; ++i){
//		printf("%c", wynikgry[i]);
//	}
}