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
#include <iostream>
#include <vector>
#include <string>
#include <climits>
using namespace std;

int main()
{
	int n = 0, m = 0, temp = 0;
	cin >> n;
	vector<int> oszczednosci(n);

	for (int i = 0; i < n; i++)
	{
		cin >> temp;
		oszczednosci[i] = temp;
	}

	vector<int> bilans = oszczednosci;

	cin >> m;
	string cykl;
	cin >> cykl;

	int liczbaGier = m*n;
	vector< vector<bool> > szablon(liczbaGier);
	int index = 0;

	int c = 1;

	for (int i = 0; i < m; i++)
	{
		for (int j = 0; j < n; j++)
		{
			if (cykl[index] == 'W')
			{
				szablon[j].push_back(1);
				oszczednosci[j]++;
			}
			else
			{
				szablon[j].push_back(0);
				oszczednosci[j]--;
				if (oszczednosci[j] <= 0)
				{
					cout << c << endl;
					return 0;
				}
			}
			c++;
			if (index == m - 1)
				index = 0;
			else
				index++;
		}
	}

	vector<int> pozycje;
	int maxVal = 0;

	for (int i = 0; i < n; i++)
	{
		bilans[i] -= oszczednosci[i];
		if (bilans[i] > maxVal)
		{
			maxVal = bilans[i];
			pozycje.push_back(i);
		}
	}

	if (pozycje.empty())
		cout << -1 << endl;
	else
	{
		int min = INT_MAX;
		int minPos = 0;

		for (int i = 0; i < pozycje.size(); i++)
		{
			int gracz = pozycje[i];
			int curr = 0;
			int index = 0, indexMax = szablon[gracz].size() - 1;

			while (oszczednosci[gracz] > 0)
			{
				if (szablon[gracz][index])
					oszczednosci[gracz]++;
				else
					oszczednosci[gracz]--;

				curr++;
				if (index == indexMax)
					index = 0;
				else
					index++;
			}

			if (curr < min)
			{
				min = curr;
				minPos = i;
			}
		}

		cout << c + (min-1)*n + pozycje[minPos] << endl;
	}
	
	return 0;
}