Submission #61272

# Submission time Handle Problem Language Result Execution time Memory
61272 2018-07-25T14:39:51 Z Miyukine parentrises (BOI18_parentrises) C++14
100 / 100
165 ms 3784 KB
#include <bits/stdc++.h>
using namespace std;
#define FOR(i, a, b) for (int i=(a); i<=(b); ++i)
const int maxn = 1e6 + 5;
typedef pair <int, int> PII;
typedef long long ll;
const int mod = 1e9 + 7;

int dp[2][605][605];
//dp[length][stacksize in RG][stacksize in RB]
int type, n;
string s;
int stos[1000100], DL = 0;
char arr[1000100];
int result[305];

void solveone()
{
	cin >> s;
	int m = (int)s.size();
	DL = 0;
	for (int i = 0; i < m; ++i)
	{
		if (s[i] == '(') stos[++DL] = i, arr[i] = 'R';
		else
		{
			if (DL > 0) 
			{
				arr[stos[DL]] = 'B';
				arr[i] = 'B';
				DL--;
			}
			else arr[i] = 'R';
		}
	}
	
	int wait = 0;
	for (int i = 0; i < m; ++i)
		if (arr[i] == 'R' && s[i] == '(') ++wait;
		else if (arr[i] == 'B' && s[i] == ')' && wait > 0)
		{
			--wait;
			arr[i] = 'G';
		}
	
	if (wait > 0)
	{
		cout << "impossible\n";
		return;
	}
	wait = 0;
	for (int i = m - 1; i >= 0; --i)
	{
		if (arr[i] == 'R' && s[i] == ')') ++wait;
		else if (arr[i] == 'B' && s[i] == '(' && wait > 0)
		{
			--wait;
			arr[i] = 'G';
		}
	}
	if (wait > 0)
	{
		cout << "impossible\n";
		return;
	}
	
	for (int i = 0; i < m; ++i) cout << arr[i];
	cout << "\n";
}

inline void addmod(int &x, int v) { x += v; while (x >= mod) x -= mod; }

int main()
{
	ios_base::sync_with_stdio(false);
	cin >> type;
	if (type == 1)
	{
		cin >> n;
		for (int i=0; i<n; ++i) solveone();
	}
	if (type == 2)
	{
		int tests;
		n = 301;
		dp[0][0][0] = 1; //one sequence
		for (int i=1; i<=n; ++i)
		{
			FOR(j, 0, 604)
				FOR(k, 0, 604) dp[i & 1][j][k] = 0;
			
			FOR(j, 0, i)
				FOR(k, j, 2 * i)
				{
					//i have two options: either update with ) or with (
					if (k) addmod(dp[i & 1][max(j - 2, 0)][k - 1], dp[(i & 1) ^ 1][j][k]);
					addmod(dp[i & 1][j + 1][k + 2], dp[(i & 1) ^ 1][j][k]);
				}
			
			for (int j = 0; j <= 604; ++j) addmod(result[i], dp[i & 1][0][j]);
		}

		cin >> tests;
		while (tests--)
		{
			cin >> n;
			cout << result[n] << "\n";
		}
	}
}
# Verdict Execution time Memory Grader output
1 Correct 3 ms 380 KB Output is correct
2 Correct 3 ms 436 KB Output is correct
3 Correct 2 ms 556 KB Output is correct
4 Correct 2 ms 556 KB Output is correct
5 Correct 3 ms 556 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 556 KB Output is correct
2 Correct 2 ms 556 KB Output is correct
3 Correct 1 ms 556 KB Output is correct
4 Correct 3 ms 556 KB Output is correct
5 Correct 3 ms 556 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 556 KB Output is correct
2 Correct 2 ms 556 KB Output is correct
3 Correct 1 ms 556 KB Output is correct
4 Correct 3 ms 556 KB Output is correct
5 Correct 3 ms 556 KB Output is correct
6 Correct 2 ms 556 KB Output is correct
7 Correct 3 ms 556 KB Output is correct
8 Correct 2 ms 556 KB Output is correct
9 Correct 3 ms 556 KB Output is correct
10 Correct 3 ms 556 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 556 KB Output is correct
2 Correct 2 ms 556 KB Output is correct
3 Correct 1 ms 556 KB Output is correct
4 Correct 3 ms 556 KB Output is correct
5 Correct 3 ms 556 KB Output is correct
6 Correct 2 ms 556 KB Output is correct
7 Correct 3 ms 556 KB Output is correct
8 Correct 2 ms 556 KB Output is correct
9 Correct 3 ms 556 KB Output is correct
10 Correct 3 ms 556 KB Output is correct
11 Correct 5 ms 556 KB Output is correct
12 Correct 3 ms 632 KB Output is correct
13 Correct 3 ms 632 KB Output is correct
14 Correct 3 ms 632 KB Output is correct
15 Correct 3 ms 632 KB Output is correct
16 Correct 24 ms 728 KB Output is correct
17 Correct 8 ms 1008 KB Output is correct
18 Correct 6 ms 1008 KB Output is correct
19 Correct 8 ms 1008 KB Output is correct
20 Correct 9 ms 1068 KB Output is correct
21 Correct 139 ms 1516 KB Output is correct
22 Correct 68 ms 3784 KB Output is correct
23 Correct 58 ms 3784 KB Output is correct
24 Correct 54 ms 3784 KB Output is correct
25 Correct 57 ms 3784 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 143 ms 3784 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 143 ms 3784 KB Output is correct
2 Correct 165 ms 3784 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 143 ms 3784 KB Output is correct
2 Correct 165 ms 3784 KB Output is correct
3 Correct 133 ms 3784 KB Output is correct