#include <cstdio> #include <iostream> #include <vector> #include <list> #include <string> #include <set> #include <map> #include <algorithm> #include <utility> #include <cmath> #include <queue> #include <stack> #include <cassert> #include <cstring> #include <climits> #include <functional> #include <unordered_set> #include <unordered_map> #define VAR(i,v) __typeof(v) i = (v) #define SIZE(x) ((int)(x).size()) #define ALL(x) (x).begin(), (x).end() #define REP(i,b) for(int i=0; i<(b); ++i) #define FOR(i,a,b) for(int i=(a); i<=(b); ++i) #define FORD(i,a,b) for(int i=(a); i>=(b); --i) #define FOREACH(i,c) for(VAR(i,(c).begin()); i != (c).end(); ++i) #define PB push_back #define MP make_pair #define ST first #define ND second #define NL printf("\n") using namespace std; typedef pair<int,int> PII; typedef vector<int> VI; typedef long long LL; const int INF = 2147483640; const int MAXN = 1000005; int a[MAXN]; char s[MAXN]; int b[MAXN]; int l[MAXN]; int n, m; /*void search() { REP(i,m) if(!vis[i]) { printf("Dla i = %d\n", i); VI f = {i}; vis[i] = 1; int d = (i+n)%m; int sum = b[i]; int mn = b[i]; while(d != i) { f.PB(d); vis[d] = 1; sum += b[d]; mn = min(mn, b[d]); d = (d+n) % m; } int k = SIZE(f); for(int x: f) siz[x] = k; f.insert(f.end(),ALL(f)); VI t(SIZE(f)); t[0] = b[f[0]]; FOR(i,1,SIZE(f)-1) t[i] = t[i-1] + b[f[i]]; printf(" sum = %d, mn = %d\n", sum, mn); for(int x: t) printf(" %d", x); NL; int u = k; FORD(i,k,1) { for(int j=f[u]; j<n; j+=m) { printf(" %d", j); printf(": "); FOR(j,i,i+k-1) printf("%d ", t[j]-t[i-1]); NL; } u--; } NL; } }*/ int main() { scanf("%d", &n); REP(i,n) scanf("%d", &a[i]); scanf("%d", &m); scanf("%s", s); REP(i,m) b[i] = (s[i]=='W') ? 1 : -1; int i = 0, j = 0; int res = 0; while(a[i] > 0) { res++; a[i] += b[j]; if(a[i] <= 0) break; i++; j++; i %= n; j %= m; if(res == 40000000) { res = -1; break; } } printf("%d\n", res); return 0; }
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 | #include <cstdio> #include <iostream> #include <vector> #include <list> #include <string> #include <set> #include <map> #include <algorithm> #include <utility> #include <cmath> #include <queue> #include <stack> #include <cassert> #include <cstring> #include <climits> #include <functional> #include <unordered_set> #include <unordered_map> #define VAR(i,v) __typeof(v) i = (v) #define SIZE(x) ((int)(x).size()) #define ALL(x) (x).begin(), (x).end() #define REP(i,b) for(int i=0; i<(b); ++i) #define FOR(i,a,b) for(int i=(a); i<=(b); ++i) #define FORD(i,a,b) for(int i=(a); i>=(b); --i) #define FOREACH(i,c) for(VAR(i,(c).begin()); i != (c).end(); ++i) #define PB push_back #define MP make_pair #define ST first #define ND second #define NL printf("\n") using namespace std; typedef pair<int,int> PII; typedef vector<int> VI; typedef long long LL; const int INF = 2147483640; const int MAXN = 1000005; int a[MAXN]; char s[MAXN]; int b[MAXN]; int l[MAXN]; int n, m; /*void search() { REP(i,m) if(!vis[i]) { printf("Dla i = %d\n", i); VI f = {i}; vis[i] = 1; int d = (i+n)%m; int sum = b[i]; int mn = b[i]; while(d != i) { f.PB(d); vis[d] = 1; sum += b[d]; mn = min(mn, b[d]); d = (d+n) % m; } int k = SIZE(f); for(int x: f) siz[x] = k; f.insert(f.end(),ALL(f)); VI t(SIZE(f)); t[0] = b[f[0]]; FOR(i,1,SIZE(f)-1) t[i] = t[i-1] + b[f[i]]; printf(" sum = %d, mn = %d\n", sum, mn); for(int x: t) printf(" %d", x); NL; int u = k; FORD(i,k,1) { for(int j=f[u]; j<n; j+=m) { printf(" %d", j); printf(": "); FOR(j,i,i+k-1) printf("%d ", t[j]-t[i-1]); NL; } u--; } NL; } }*/ int main() { scanf("%d", &n); REP(i,n) scanf("%d", &a[i]); scanf("%d", &m); scanf("%s", s); REP(i,m) b[i] = (s[i]=='W') ? 1 : -1; int i = 0, j = 0; int res = 0; while(a[i] > 0) { res++; a[i] += b[j]; if(a[i] <= 0) break; i++; j++; i %= n; j %= m; if(res == 40000000) { res = -1; break; } } printf("%d\n", res); return 0; } |