結果

問題 No.291 黒い文字列
ユーザー bal4ubal4u
提出日時 2019-06-21 14:44:17
言語 C
(gcc 12.3.0)
結果
AC  
実行時間 44 ms / 2,000 ms
コード長 2,010 bytes
コンパイル時間 360 ms
コンパイル使用メモリ 30,608 KB
実行使用メモリ 13,212 KB
最終ジャッジ日時 2023-08-26 05:43:05
合計ジャッジ時間 2,220 ms
ジャッジサーバーID
(参考情報)
judge15 / judge11
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 1 ms
4,376 KB
testcase_01 AC 0 ms
4,376 KB
testcase_02 AC 4 ms
4,376 KB
testcase_03 AC 1 ms
4,380 KB
testcase_04 AC 1 ms
4,376 KB
testcase_05 AC 1 ms
4,376 KB
testcase_06 AC 0 ms
4,376 KB
testcase_07 AC 3 ms
4,376 KB
testcase_08 AC 3 ms
4,376 KB
testcase_09 AC 0 ms
4,376 KB
testcase_10 AC 1 ms
4,376 KB
testcase_11 AC 1 ms
4,376 KB
testcase_12 AC 10 ms
4,376 KB
testcase_13 AC 0 ms
4,380 KB
testcase_14 AC 1 ms
4,376 KB
testcase_15 AC 4 ms
4,380 KB
testcase_16 AC 26 ms
7,884 KB
testcase_17 AC 31 ms
9,192 KB
testcase_18 AC 28 ms
8,568 KB
testcase_19 AC 40 ms
13,212 KB
testcase_20 AC 40 ms
12,768 KB
testcase_21 AC 0 ms
4,376 KB
testcase_22 AC 39 ms
8,168 KB
testcase_23 AC 1 ms
4,376 KB
testcase_24 AC 44 ms
11,984 KB
testcase_25 AC 0 ms
4,376 KB
testcase_26 AC 0 ms
4,376 KB
testcase_27 AC 1 ms
4,376 KB
testcase_28 AC 0 ms
4,380 KB
testcase_29 AC 1 ms
4,380 KB
権限があれば一括ダウンロードができます
コンパイルメッセージ
main.c: 関数 ‘ins’ 内:
main.c:7:14: 警告: 関数 ‘getchar_unlocked’ の暗黙的な宣言です [-Wimplicit-function-declaration]
    7 | #define gc() getchar_unlocked()
      |              ^~~~~~~~~~~~~~~~
main.c:18:21: 備考: 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