結果
問題 | No.3098 Linear Reversi |
ユーザー |
👑 |
提出日時 | 2025-03-17 19:36:13 |
言語 | C (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 26 ms / 4,000 ms |
コード長 | 1,516 bytes |
コンパイル時間 | 1,718 ms |
コンパイル使用メモリ | 26,880 KB |
実行使用メモリ | 6,272 KB |
最終ジャッジ日時 | 2025-04-06 15:01:09 |
合計ジャッジ時間 | 1,917 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 37 |
コンパイルメッセージ
main.c: In function ‘main’: main.c:41:9: warning: ignoring return value of ‘scanf’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 41 | scanf("%d", &N); | ^~~~~~~~~~~~~~~ main.c:42:9: warning: ignoring return value of ‘scanf’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 42 | scanf("%s", S); | ^~~~~~~~~~~~~~
ソースコード
#include <stdio.h> const int Mod = 998244353; long long solve(int N, char S[]) { int i, j, k, l, cur, prev; long long dp[2][2][2][4] = {}; if (S[0] != 'x') dp[0][0][0][3] = 1; if (S[0] != 'o') dp[0][0][1][3] = 1; for (i = 1, cur = 1, prev = 0; i < N; i++, cur ^= 1, prev ^= 1) { for (j = 0; j < 2; j++) for (k = 0; k < 2; k++) for (l = 1; l < 4; l++) dp[cur][j][k][l] = 0; if (S[i] != 'x') { dp[cur][0][0][1] += dp[prev][0][1][2] + dp[prev][0][1][3] + dp[prev][1][1][3]; dp[cur][0][0][2] += dp[prev][0][0][1]; dp[cur][0][0][3] += dp[prev][0][0][2] + dp[prev][0][0][3]; dp[cur][1][0][1] += dp[prev][0][1][1] + dp[prev][1][1][2]; dp[cur][1][0][2] += dp[prev][1][0][1]; dp[cur][1][0][3] += dp[prev][1][0][2] + dp[prev][1][0][3]; } if (S[i] != 'o') { dp[cur][0][1][1] += dp[prev][0][0][2] + dp[prev][0][0][3] + dp[prev][1][0][3]; dp[cur][0][1][2] += dp[prev][0][1][1]; dp[cur][0][1][3] += dp[prev][0][1][2] + dp[prev][0][1][3]; dp[cur][1][1][1] += dp[prev][0][0][1] + dp[prev][1][0][2]; dp[cur][1][1][2] += dp[prev][1][1][1]; dp[cur][1][1][3] += dp[prev][1][1][2] + dp[prev][1][1][3]; } for (j = 0; j < 2; j++) for (k = 0; k < 2; k++) for (l = 0; l < 4; l++) dp[cur][j][k][l] %= Mod; } long long ans = 0; for (j = 0; j < 2; j++) for (k = 0; k < 2; k++) for (l = 1; l < 4; l++) ans += dp[prev][j][k][l]; return ans % Mod; } int main() { int N; char S[1000001]; scanf("%d", &N); scanf("%s", S); printf("%lld\n", solve(N, S)); fflush(stdout); return 0; }