結果

問題 No.291 黒い文字列
ユーザー bal4ubal4u
提出日時 2019-06-21 14:44:17
言語 C
(gcc 12.3.0)
結果
AC  
実行時間 32 ms / 2,000 ms
コード長 2,010 bytes
コンパイル時間 292 ms
コンパイル使用メモリ 31,360 KB
実行使用メモリ 13,184 KB
最終ジャッジ日時 2024-06-07 01:00:07
合計ジャッジ時間 1,705 ms
ジャッジサーバーID
(参考情報)
judge2 / judge3
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 1 ms
5,248 KB
testcase_01 AC 1 ms
5,376 KB
testcase_02 AC 3 ms
5,376 KB
testcase_03 AC 1 ms
5,376 KB
testcase_04 AC 1 ms
5,376 KB
testcase_05 AC 1 ms
5,376 KB
testcase_06 AC 1 ms
5,376 KB
testcase_07 AC 2 ms
5,376 KB
testcase_08 AC 2 ms
5,376 KB
testcase_09 AC 1 ms
5,376 KB
testcase_10 AC 1 ms
5,376 KB
testcase_11 AC 1 ms
5,376 KB
testcase_12 AC 7 ms
5,376 KB
testcase_13 AC 1 ms
5,376 KB
testcase_14 AC 1 ms
5,376 KB
testcase_15 AC 3 ms
5,376 KB
testcase_16 AC 19 ms
7,808 KB
testcase_17 AC 22 ms
9,216 KB
testcase_18 AC 19 ms
8,576 KB
testcase_19 AC 31 ms
13,184 KB
testcase_20 AC 31 ms
12,800 KB
testcase_21 AC 1 ms
5,376 KB
testcase_22 AC 27 ms
8,320 KB
testcase_23 AC 1 ms
5,376 KB
testcase_24 AC 32 ms
12,032 KB
testcase_25 AC 1 ms
5,376 KB
testcase_26 AC 1 ms
5,376 KB
testcase_27 AC 1 ms
5,376 KB
testcase_28 AC 1 ms
5,376 KB
testcase_29 AC 1 ms
5,376 KB
権限があれば一括ダウンロードができます
コンパイルメッセージ
main.c: In function 'ins':
main.c:7:14: warning: implicit declaration of function 'getchar_unlocked' [-Wimplicit-function-declaration]
    7 | #define gc() getchar_unlocked()
      |              ^~~~~~~~~~~~~~~~
main.c:18:21: note: in expansion of macro 'gc'
   18 |         while ((c = gc()) > ' ') {
      |                     ^~

ソースコード

diff #

// yukicoder: No.291 黒い文字列
// 2019.6.21 bal4u

#include <stdio.h>

#if 1
#define gc() getchar_unlocked()
#else
#define gc() getchar()
#endif

char f[128]; int x;
int ins(char *s)  // 文字列の入力 スペース以下の文字で入力終了
{
	int c;
	char *p = s;
	x = 0;
	while ((c = gc()) > ' ') {
		if (c == '?') x++;
		if (f[c]) *s++ = c;
	}
	*s = 0;
	return s-p;
}

int kuroi[6][100], sz[5];
char s[105];
char dp[105][22][22][22][22];

int main()
{
	int i, j, t, w, k, u, r, o, ans;

	f['K'] = 1, f['U'] = 2, f['R'] = 3, f['O'] = 4, f['I'] = 5, f['?'] = 0x1f;
	w = ins(s+1);

	if (x == 0) {
		sz[0] = 101;
		for (i = 1; i <= w; i++) {
			j = f[s[i]];
			if (sz[j] < sz[j-1] && kuroi[j-1][sz[j]] < i) kuroi[j][sz[j]++] = i;
		}
		ans = sz[5];
	} else if (x == w) ans = x / 5;
	else {
		dp[0][0][0][0][0] = 1, ans = 1;
		for (i = 1; i <= w; i++) {
			if ((j = f[s[i]]) <= 5) j = 1 << (j-1);
			for (k = 0; k <= 20; k++) for (u = 0; u <= 20; u++) for (r = 0; r <= 20; r++) 
				for (o = 0; o <= 20; o++) if (t = dp[i-1][k][u][r][o]) {
				if (j & 1) {
					if (k <20) { if (dp[i][k+1][u][r][o] < t) dp[i][k+1][u][r][o] = t; }
					else       { if (dp[i][k  ][u][r][o] < t) dp[i][k  ][u][r][o] = t; }
				}
				if (j & 2) {
					if (u < k) { if (dp[i][k][u+1][r][o] < t) dp[i][k][u+1][r][o] = t; }
					else       { if (dp[i][k][u  ][r][o] < t) dp[i][k][u  ][r][o] = t; }
				}
				if (j & 4) {
					if (r < u) { if (dp[i][k][u][r+1][o] < t) dp[i][k][u][r+1][o] = t; }
					else       { if (dp[i][k][u][r  ][o] < t) dp[i][k][u][r  ][o] = t; }
				}
				if (j & 8) {
					if (o < r) { if (dp[i][k][u][r][o+1] < t) dp[i][k][u][r][o+1] = t; }
					else       { if (dp[i][k][u][r][o  ] < t) dp[i][k][u][r][o  ] = t; }
				}
				if (j & 16)	{
					if (t <= o) {
						if (dp[i][k][u][r][o] < t+1) {
							dp[i][k][u][r][o] = t+1;
							if (t+1 > ans) ans = t + 1;
						}
					} else if (dp[i][k][u][r][o] < t) dp[i][k][u][r][o] = t;
				}
			}
		}
		ans--;
	}
	printf("%d\n", ans);
	return 0;
}
0