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
#include<bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef vector<int> vi;
typedef pair<int, int> pii;

#define fi first
#define se second
#define mp make_pair
#define pb push_back

ll INF = 1 << 30;
const double EPS = 1e-12;
char s[1000042];

int main()
{
    ll n,m;
    scanf("%lld",&n);
    INF*=INF;
    vi v(n), p(n);
    for(int i=0;i<n;i++) scanf("%d", &v[i]);
    scanf("%lld %s", &m,s);
    for(int i=0;i<m;i++)
    {
        if(s[i]=='W') p[i]=1;
        else p[i]=-1;
    }
    ll ans=INF;
    for(int i=0;i<n;i++)
    {
        ll sum=0, st=i%m, nxt=st, dl=0, temp=INF;
        while(nxt!=st || !dl)
        {
            sum+=p[nxt];
            ++dl;
            if(sum+v[i]==0)
            {
                temp=i+1-n+dl*n;
                break;
            }
            nxt=(nxt+n)%m;
        }

        if(temp==INF && sum<0)
        {
            ll temp2=i+1-n;
            ll cur=v[i];
            nxt=st;
            while(nxt!=st || temp2<=0)
            {
                cur+=p[nxt];
                nxt=(nxt+n)%m;
                temp2+=n;
                if(cur%sum==0)
                {
                    temp=min(temp,temp2 + cur/abs(sum)*dl*n);
                }
            }
        }
        ans=min(ans,temp);
        //printf("dla %d jest %lld %lld %lld\n", i, temp, sum, dl);
    }
    if(ans<INF) printf("%lld\n", ans);
    else printf("-1\n");
}