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
#include <iostream>
#include <vector>

using namespace std;

unsigned gcd(unsigned a, unsigned b) {
    while ( b ) {
        b ^= a;
        a ^= b;
        b  = (b^a) % a;
    }
    return a;
}

struct Pair {
	int sum;
	int min;
};

int main() {
	unsigned n;
	cin >> n;

	vector<int> boys(n);

	for (int i = 0; i < n; ++i) {
		cin >> boys[i];
	}

	unsigned m;
	cin >> m;
	
	string ctrlseq;
	cin >> ctrlseq;

	unsigned cycles = gcd(m,n);

	vector<int> v(cycles);
	vector<int> vals(m);

	for (int i = 0; i < m; ++i) {
		int val = (ctrlseq[i] == 'W') ? 1 : -1;
		vals[i] = val;
		v[i % cycles] += val;
	}

	bool flag = false;

	for (int i = 0; i < cycles; ++i) {
		if (v[i] < 0) {
			flag = true;
		}
	}

	if (flag == false) {
		cout << "-1" << endl;
		return 0;
	}

	long long maxcyc = n;
	maxcyc *= n;

	maxcyc /= cycles;

	vector<int> boys2(boys);

	for (long long i = 0; i < maxcyc; ++i) {
		if (boys[i % n] + vals[i % m] <= 0) {
			cout << i + 1 << endl;
			return 0;
		}
		boys[i % n] += vals[i % m];
	}

	
	for (int i = 0; i < n; ++i) {
		if (v[i % cycles] < 0) {
			boys[i] %= -v[i % cycles];
		}
	}

	for (long long i = 0; i < maxcyc; ++i) {
		if (boys[i % n] + vals[i % m] <= 0) {
			cout << i + 1 + (boys2[i] / -v[i%cycles])*n*m << endl;
			return 0;
		}
		boys[i % n] += vals[i % m];
	}

	return 0;
}