結果
| 問題 |
No.1646 Avoid Palindrome
|
| コンテスト | |
| ユーザー |
sgsw
|
| 提出日時 | 2021-08-13 22:14:21 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,550 bytes |
| コンパイル時間 | 240 ms |
| コンパイル使用メモリ | 82,204 KB |
| 実行使用メモリ | 279,792 KB |
| 最終ジャッジ日時 | 2024-10-03 19:32:15 |
| 合計ジャッジ時間 | 5,174 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | TLE * 1 -- * 39 |
ソースコード
'''
Python3(PyPy3) Template for Programming-Contest.
author : sgsw
generated : 2021/08/13
when : 22:01:19
'''
from collections import defaultdict
import sys
def input():
return sys.stdin.readline().rstrip()
DXY = [(0, -1), (1, 0), (0, 1), (-1, 0)] # LDRU
mod = 998244353
inf = 1 << 64
Alphabets = "abcdefghijklmnopqrstuvwxyz"
def is_Palindrome(s: str) -> bool:
n = len(s)
for i in range(n//2):
if s[i] != s[n - 1 - i]:
return False
return True
def main():
n = int(input())
s = "$" + input()
#2文字と3文字を含まなければおけ
#したがって直前の二個を持てば良い
dp = [defaultdict(int) for i in range(n + 1)]
ans = 0
if s[1] != "?":
dp[1][s[0] + s[1]] = 1
else:
for char in Alphabets:
dp[1][s[0] + char] = 1
for i in range(2,n + 1):
char = s[i]
if char != "?":
c = char
for k,v in dp[i - 1].items():
if is_Palindrome(k + c) == False and k[1] != c:
dp[i][k[1] + c] += v
dp[i][k[1] + c] %= mod
else:
for c in Alphabets:
for k,v in dp[i - 1].items():
if is_Palindrome(k + c) == False and k[1] != c:
dp[i][k[1] + c] += v
dp[i][k[1] + c] %= mod
#find answer
for k, v in dp[n].items():
ans += v
ans %= mod
print(ans)
return 0
if __name__ == "__main__":
main()
sgsw