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

int tabo[1000000];
int tabw[1000000];
int okres;
long long int gier_w_okresie;


int main()
{
    int a,b,c,n,m,pos;
    char ch;
    int bilans,kasa,runda_przegranej,ileokresow;
    long long int wynik, aktwynik;


    scanf("%d",&n);
    for (a=0; a<n; a++)
        scanf("%d\n",&tabo[a]);
    scanf("%d\n",&m);
    for (a=0; a<m; a++)
    {
        scanf("%c",&ch);
        if (ch=='W') tabw[a]=1;
        else tabw[a]=-1;
    }

//okres gry kazdego gracza
    a=n;
    b=m;
    while (b>0) //nwd
    {
        c=a%b;
        a=b;
        b=c;
    } //a=nwd
    gier_w_okresie=(long long int)n*m/a;
    okres=gier_w_okresie/n;
    //obliczenia dla uzytkownikow
    wynik=1000000000001;
    for (a=n-1; a>=0; a--)
    {
        bilans=0;
        pos=a%m;
        kasa=tabo[a];
        runda_przegranej=-1;
        for(b=0; b<okres; b++)
        {
            bilans+=tabw[pos];
            kasa+=tabw[pos];
            pos=(pos+n)%m;
            if (kasa==0)
            {
                runda_przegranej=b;
            break;
            }
         }
        if ((runda_przegranej==-1)&&(bilans<0))
        {
            pos=a%m;
            kasa=tabo[a]%(-bilans);
            if (kasa==0){
                ileokresow=tabo[pos]/(-bilans)-1;
                kasa=-bilans;
            } else ileokresow=tabo[pos]/(-bilans);
            for(b=0; b<okres; b++)
            {
            kasa+=tabw[pos];
            pos=(pos+n)%m;
            if (kasa==0)
            {
                runda_przegranej=ileokresow*okres+b;
            break;
            }
         }
        }
         if (runda_przegranej>=0)
         {
            aktwynik=(long long int)n*runda_przegranej+a+1;
            if (aktwynik<wynik) wynik=aktwynik;
         }



    }

    if (wynik<1000000000001) printf("%I64d\n",wynik);
       else printf("-1\n");







    return 0;
}