結果

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

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 1 ms
5,248 KB
testcase_01 AC 1 ms
5,376 KB
testcase_02 AC 1 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 1 ms
5,376 KB
testcase_08 AC 1 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 3 ms
5,376 KB
testcase_13 AC 1 ms
5,376 KB
testcase_14 AC 1 ms
5,376 KB
testcase_15 AC 1 ms
5,376 KB
testcase_16 AC 10 ms
8,832 KB
testcase_17 AC 12 ms
10,240 KB
testcase_18 AC 10 ms
9,344 KB
testcase_19 AC 16 ms
13,312 KB
testcase_20 AC 16 ms
13,696 KB
testcase_21 AC 1 ms
5,376 KB
testcase_22 AC 19 ms
14,848 KB
testcase_23 AC 1 ms
5,376 KB
testcase_24 AC 18 ms
14,464 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 <= k; u++) for (r = 0; r <= u; r++) 
				for (o = 0; o <= r; o++) if (t = dp[i-1][k][u][r][o]) {
				if (dp[i][k][u][r][o] < t) dp[i][k][u][r][o] = t;
				
				if (j & 1) {
					if (k < 20 && dp[i][k+1][u][r][o] < t) dp[i][k+1][u][r][o] = t;
				}
				if (j & 2) {
					if (u < k && dp[i][k][u+1][r][o] < t) dp[i][k][u+1][r][o] = t;
				}
				if (j & 4) {
					if (r < u && dp[i][k][u][r+1][o] < t) dp[i][k][u][r+1][o] = t;
				}
				if (j & 8) {
					if (o < r && dp[i][k][u][r][o+1] < t) dp[i][k][u][r][o+1] = t;
				}
				if (j & 16)	{
					if (t <= o && dp[i][k][u][r][o] < t+1) {
						dp[i][k][u][r][o] = t+1;
						if (t+1 > ans) ans = t+1;
					}
				}
			}
		}
		ans--;
	}
	printf("%d\n", ans);
	return 0;
}
0