結果
問題 | No.3040 Aoiスコア |
ユーザー |
![]() |
提出日時 | 2025-02-28 21:44:29 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 148 ms / 1,000 ms |
コード長 | 1,349 bytes |
コンパイル時間 | 187 ms |
コンパイル使用メモリ | 82,448 KB |
実行使用メモリ | 80,700 KB |
最終ジャッジ日時 | 2025-02-28 21:44:34 |
合計ジャッジ時間 | 2,994 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 24 |
ソースコード
n, m = map(int, input().split())mod = 998244353S = input()node = [[] for _ in range(n)]for _ in range(m):a, b = [int(x)-1 for x in input().split()]node[a].append(b)node[b].append(a)dp = [[[0, 0, 0, 0] for _ in range(3)] for _ in range(n)]for i in range(n):if S[i] == "a":dp[i][0][0] = 1elif S[i] == "?":dp[i][0][1] = 1else:continuefor nxt in node[i]:if S[nxt] == "o":for j in range(4):dp[nxt][1][j] += dp[i][0][j]elif S[nxt] == "?":for j in range(1, 4):dp[nxt][1][j] += dp[i][0][j-1]for now in range(n):for nxt in node[now]:if S[now] not in "o?":continueif S[nxt] == "i":for j in range(4):dp[nxt][2][j] += dp[now][1][j]; dp[nxt][2][j] %= modelif S[nxt] == "?":for j in range(1, 4):dp[nxt][2][j] += dp[now][1][j-1]; dp[nxt][2][j] %= modif S[nxt] == "?" and S[now] == "o":dp[nxt][2][2] -= 1elif S[nxt] == "?" and S[now] == "?":dp[nxt][2][3] -= 1ans = 0cnt = S.count("?")D = [pow(26, cnt-i, mod) for i in range(4)]for i in range(n):for j in range(4):ncnt = cnt - jans += dp[i][2][j] * D[j] % mod; ans %= modprint(ans)