Submission #76751560


Source Code Expand

Copy
#include <stdio.h>
#define MOD_BY 998244353
int add(int a, int b) {
return a + b - MOD_BY * (a + b >= MOD_BY);
}
char S[312345];
int memo[312345][4];
int calc(int pos, int prev) {
int id = S[pos] - 'a';
int ans = 0;
if (id < 0 || 2 < id) return prev != 3;
if (memo[pos][prev]) return ~memo[pos][prev];
/* */
ans = add(ans, calc(pos + 1, prev));
/* */
if (id != prev) ans = add(ans, calc(pos + 1, id));
return ~(memo[pos][prev] = ~ans);
}
int main(void) {
if (fgets(S, sizeof(S), stdin) == NULL) return 1;
printf("%d\n", calc(0, 3));
return 0;
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#include <stdio.h>

#define MOD_BY 998244353

int add(int a, int b) {
	return a + b - MOD_BY * (a + b >= MOD_BY);
}

char S[312345];

int memo[312345][4];

int calc(int pos, int prev) {
	int id = S[pos] - 'a';
	int ans = 0;
	if (id < 0 || 2 < id) return prev != 3;
	if (memo[pos][prev]) return ~memo[pos][prev];

	/* 入れない */
	ans = add(ans, calc(pos + 1, prev));
	/* 入れる */
	if (id != prev) ans = add(ans, calc(pos + 1, id));

	return ~(memo[pos][prev] = ~ans);
}

int main(void) {
	if (fgets(S, sizeof(S), stdin) == NULL) return 1;
	printf("%d\n", calc(0, 3));
	return 0;
}

Submission Info

Submission Time
Task D - Not Adjacent 2
User mikecat
Language C23 (GCC 14.2.0)
Score 400
Code Size 620 Byte
Status AC
Exec Time 18 ms
Memory 29992 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 400 / 400
Status
AC × 2
AC × 28
Set Name Test Cases
Sample sample_01.txt, sample_02.txt
All min.txt, random_01.txt, random_02.txt, random_03.txt, random_04.txt, random_05.txt, random_06.txt, random_07.txt, random_08.txt, random_09.txt, random_10.txt, random_11.txt, random_12.txt, random_13.txt, random_14.txt, random_15.txt, random_16.txt, random_17.txt, random_18.txt, random_19.txt, random_20.txt, random_21.txt, random_22.txt, random_23.txt, random_24.txt, random_25.txt, sample_01.txt, sample_02.txt
Case Name Status Exec Time Memory
min.txt AC 0 ms 1512 KiB
random_01.txt AC 17 ms 29828 KiB
random_02.txt AC 13 ms 23080 KiB
random_03.txt AC 17 ms 29888 KiB
random_04.txt AC 7 ms 12428 KiB
random_05.txt AC 16 ms 29892 KiB
random_06.txt AC 6 ms 11700 KiB
random_07.txt AC 17 ms 29828 KiB
random_08.txt AC 6 ms 10932 KiB
random_09.txt AC 17 ms 29828 KiB
random_10.txt AC 14 ms 23948 KiB
random_11.txt AC 17 ms 29992 KiB
random_12.txt AC 2 ms 3560 KiB
random_13.txt AC 18 ms 29892 KiB
random_14.txt AC 13 ms 22636 KiB
random_15.txt AC 17 ms 29856 KiB
random_16.txt AC 6 ms 11424 KiB
random_17.txt AC 17 ms 29932 KiB
random_18.txt AC 11 ms 20020 KiB
random_19.txt AC 16 ms 29828 KiB
random_20.txt AC 4 ms 7860 KiB
random_21.txt AC 16 ms 29856 KiB
random_22.txt AC 10 ms 19380 KiB
random_23.txt AC 15 ms 29992 KiB
random_24.txt AC 3 ms 6176 KiB
random_25.txt AC 12 ms 29828 KiB
sample_01.txt AC 0 ms 1512 KiB
sample_02.txt AC 0 ms 1460 KiB


2026-06-18 (Thu)
01:45:10 +09:00