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

#define lint long long int

using namespace std;
lint kolpocz[1000001];
lint kol[1000001];
lint roznice[1000001];
short wygryw[1000001];
lint n,m;
lint TMP;
char tmp; 

lint NWD(lint a, lint b)
{
  int pom;
 
    while(b!=0)
  {
      pom = b;
      b = a%b;
      a = pom;  
    }
    return a;
}

int main(){
	ios_base::sync_with_stdio(0);
	cin>>n;
	for (lint i = 0; i < n; ++i)
	{
		cin>>TMP;
		kol[i]=TMP;
		kolpocz[i]=TMP;
	}
	cin>>m;
	for (lint i = 0; i < m; ++i)
	{
		cin>>tmp;
		if(tmp=='W') wygryw[i]=1;
		else wygryw[i]=-1; 
	}

	lint nww = n/NWD(n, m)*m;
	//nww = n*m;
	lint l1=0;
	lint l2=0;
	unsigned long long int ile=0;
	while(true){
		if(ile==nww){ 
			bool koniec = true;
			for (int i = 0; i < n; ++i)
			{
				if(kol[i]<kolpocz[i])koniec=false;
			}
			if(koniec){
				cout<<-1<<endl;
				return 0;
			}

			int x=0;
			lint maximal=-9223372036854775805;
			for (int i = 0; i < n; ++i)
			{
				roznice[i]=kol[i]-kolpocz[i];
				if(roznice[i]<0){
					int y = roznice[i]*-1;
					x=kol[i]/y; // x*nww = minimalna liczba obrotow
					x*=-1;
					if(x>maximal){
						maximal=x;
					}
				}
			}
			maximal*=-1;
			maximal--;
			ile += maximal*nww;
			for (int i = 0; i < n; ++i){
				if(kol[i]+maximal*roznice[i]<9223372036854775805){
					kol[i]+=maximal*roznice[i];
				}
			}
		}
		kol[l1]+=wygryw[l2];
		ile++;
		if(kol[l1]==0)break;
		l1++;
		l2++;
		if(l1==n)l1=0;
		if(l2==m)l2=0;
	}
	cout<<ile<<endl;
	return 0;
}