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
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <math.h>
using namespace std;

int n, m, piniondz[1000000], rozdania[1000000], minima[1000000];
char znak;
short int maszyna[1000000];
long long int licznik=0, licznik_koncowy=0;
vector <int> spr;
vector <int> spr_kon;
vector <long long int> licz;

int main()
{
ios_base::sync_with_stdio(0);
cin>>n;
for(int i=0; i<n; i++){
    cin>>piniondz[i];
}
cin>>m;
for(int i=0; i<m; i++){
    cin>>znak;
    if(znak=='W')
        maszyna[i]=1;
    else
        maszyna[i]=-1;
}

int i=0, j=0;
do{
    piniondz[i]=piniondz[i]+maszyna[j];
    licznik++;
    if(piniondz[i]==0){
        cout<<licznik;
        return 0;
    }

    rozdania[i]=rozdania[i]+maszyna[j];

    if(rozdania[i]<minima[i])
        minima[i]=rozdania[i];

    i++; j++;
    if(i==n)
        i=0;
    if(j==m)
        j=0;
}while(i!=0 || j!=0);

for(int k=0; k<n; k++){
    if(rozdania[k]<0 || minima[k]+piniondz[k]<=0){
        spr.push_back(k);
    }
}

if(spr.empty()==true){
    cout<<"-1";
    return 0;
}

licznik_koncowy=licznik;
while(true){
for(int k=0; k<spr.size(); k++){
    if(piniondz[spr[k]]+minima[spr[k]]<=0){
        spr_kon.push_back(spr[k]);

    }
    else{
        piniondz[spr[k]]=piniondz[spr[k]]+rozdania[spr[k]];
    }
}
if(spr_kon.size()>0)
    break;

licznik_koncowy=licznik_koncowy+licznik;
}

for(int k=0; k<spr_kon.size(); k++){
    i=0;
    while(piniondz[spr_kon[k]]>0){
        int index=(spr_kon[k]+n*i)%m;
        piniondz[spr_kon[k]]=piniondz[spr_kon[k]]+maszyna[index];
    }
    licz.push_back(licznik_koncowy+(spr_kon[k]+n*i)+1);
}
long long int mini=licz[0];

for(int k=0; k<licz.size(); k++){
    if(licz[k]<mini)
        mini=licz[k];
}

cout<<mini;

return 0;
}