Submission #719356

#TimeUsernameProblemLanguageResultExecution timeMemory
719356rainboyparentrises (BOI18_parentrises)C11
100 / 100
102 ms12436 KiB
#include <stdio.h>
#include <string.h>

#define N	300
#define L	1000000
#define MD	1000000007

int max(int a, int b) { return a > b ? a : b; }

int ans[N + 1];

void init() {
	static int dp[N + 1][N * 2 + 1], dq[N + 1][N * 2 + 1];
	int n, a, a_, b, b_;

	dp[0][0] = 1;
	ans[0] = 1;
	for (n = 1; n <= N; n++) {
		for (a = 0; a <= n; a++)
			memset(dq[a], 0, (n * 2 + 1) * sizeof *dq[a]);
		for (a = 0; a <= n - 1; a++)
			for (b = 0; b <= (n - 1) * 2; b++) {
				int x = dp[a][b];

				a_ = a + 1, b_ = b + 2;
				dq[a_][b_] = (dq[a_][b_] + x) % MD;
				if (b > 0) {
					a_ = max(a - 2, 0), b_ = b - 1;
					dq[a_][b_] = (dq[a_][b_] + x) % MD;
				}
			}
		for (a = 0; a <= n; a++)
			memcpy(dp[a], dq[a], (n * 2 + 1) * sizeof *dq[a]);
		for (b = 0; b <= n * 2; b++)
			ans[n] = (ans[n] + dp[0][b]) % MD;
	}
}

int main() {
	int mode, t;

	scanf("%d%d", &mode, &t);
	init();
	while (t--)
		if (mode == 1) {
			static char cc[L + 1];
			static int aa[L + 1], bb[L + 1];
			int l, h, bad, d;

			scanf("%s", cc), l = strlen(cc);
			bad = 0;
			aa[0] = bb[0] = 0;
			for (h = 0; h < l; h++)
				if (cc[h] == '(')
					aa[h + 1] = aa[h] + 1, bb[h + 1] = bb[h] + 2;
				else {
					if (bb[h] == 0) {
						bad = 1;
						break;
					}
					aa[h + 1] = max(aa[h] - 2, 0), bb[h + 1] = bb[h] - 1;
				}
			if (bad || aa[l] > 0)
				printf("impossible\n");
			else {
				d = 0;
				for (h = l - 1; h >= 0; h--)
					if (cc[h] == '(') {
						if (d - 1 <= bb[h])
							cc[h] = d % 2 == 0 ? 'B' : 'R', d--;
						else
							cc[h] = 'G', d -= 2;
					} else {
						if (d + 1 >= aa[h])
							cc[h] = d % 2 == 0 ? 'R' : 'B', d++;
						else
							cc[h] = 'G', d += 2;
					}
				printf("%s\n", cc);
			}
		} else {
			int n;

			scanf("%d", &n);
			printf("%d\n", ans[n]);
		}
	return 0;
}

Compilation message (stderr)

parentrises.c: In function 'main':
parentrises.c:42:2: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   42 |  scanf("%d%d", &mode, &t);
      |  ^~~~~~~~~~~~~~~~~~~~~~~~
parentrises.c:50:4: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   50 |    scanf("%s", cc), l = strlen(cc);
      |    ^~~~~~~~~~~~~~~
parentrises.c:84:4: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   84 |    scanf("%d", &n);
      |    ^~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...