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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define ll long long
#define MAX 2000000000000

ll nwd(ll a,ll b) {
        ll c;
        while(b!=0) { c = a % b; a = b; b = c; }
        return a;
}

ll nww(ll a, ll b) {
        return a*b/nwd(a,b);
}

int main() {
        ll n,m,i,j;
        ll *ta, *tb, *tc;
        char *tr;
        ll nm, mr;

        scanf("%lld", &n);
        ta = malloc(n*sizeof(*ta));
        tb = malloc(n*sizeof(*tb));
        tc = malloc(n*sizeof(*tc));
        bzero(tb, n*sizeof(*tb));
        bzero(tc, n*sizeof(*tc));
        for (i=0; i<n; ++i) {
                scanf("%lld", ta+i);
        }

        scanf("%lld\n", &m);

        tr = malloc((m+2)*sizeof(*tr));
        fgets(tr, m+1, stdin);
        tr[m] = 0;

        nm = nww(n,m);

        for (i=0; i<nm; ++i) {
                if (tr[i%m] == 'W') {
                        ta[i%n]++;
                        tb[i%n]++;
                } else {
                        ta[i%n]--;
                        tb[i%n]--;
                        if (tb[i%n] < tc[i%n]) tc[i%n] = tb[i%n];
                }
                if (ta[i%n] == 0) {
                        printf("%lld\n", i+1);
                        free(ta);
                        free(tb);
                        free(tc);
                        free(tr);
                        return 0;
                }
        }

        mr = MAX;
        for (i=0; i<n; ++i) {
                if (tb[i] < 0) {
                        j = ta[i] + tc[i];
                        j /= 0-tb[i];
                        if (j<mr) mr = j;
                }
        }
        if (mr == MAX) {
                printf("-1\n");
                free(ta);
                free(tb);
                free(tc);
                free(tr);
                return 0;
        }
        for (i=0; i<n; ++i) {
                ta[i] += mr*tb[i];
        }

        for (i = (mr+1)*nm; ta[(i-1)%n] > 0; i++) {
                if (tr[i%m] == 'W') {
                        ta[i%n]++;
                } else {
                        ta[i%n]--;
                }
        }
        printf("%lld\n", i);
        free(ta);
        free(tb);
        free(tc);
        free(tr);

        return 0;
}