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

using namespace std;

bool czyzbankrutuje (const int numer, const string &cykl, const int &skok, int ile)
{
    int temp = ile;
    int gdzie = numer;
    do
    {
        if (cykl[gdzie] == 'W')
            ++ile;
        else
            --ile;
        if (ile == 0)
            return 1;
        gdzie = (gdzie + skok) % cykl.size();
    } while(gdzie != numer);
    if (ile >= temp)
    {
        return 0;
    }
    else
        return 1;
}

int gramy (const int iledzieci, const string cykl, vector <int> &ktoile)
{
    int numer = 0;
    int ktory = 0;
    int kcykl = 0;
    while (1)
    {
        ++numer;
        if (cykl[kcykl] == 'W')
        {
            ++ktoile[ktory];
        }
        else
        {
            --ktoile[ktory];
        }
        if (ktoile[ktory] == 0)
        {
            break;
        }
        kcykl = numer % cykl.size();
        ktory = numer % iledzieci;
    }
    return numer;
}

int main()
{
    ios_base::sync_with_stdio(0);
    int iledzieci;
    cin >> iledzieci;
    vector <int> ktoile(iledzieci);
    for (int i=0; i<iledzieci; ++i)
        cin >> ktoile[i];
    int dcyklu;
    cin >> dcyklu;
    string cykl;
    cin >> cykl;
    int skok = iledzieci%dcyklu;
    for (int i=0; i<iledzieci; ++i)
    {
        if ( czyzbankrutuje (i, cykl, skok, ktoile[i]) )
        {
            break;
        }
        if ( i == iledzieci-1 ) //zadne dziecko nie zbankrutuje
        {
            cout << "-1";
            return 0;
        }
    }
    int numer = gramy (iledzieci, cykl, ktoile);
    cout << numer;
    return 0;
}