結果
| 問題 |
No.1755 Almost Palindrome
|
| コンテスト | |
| ユーザー |
👑 SPD_9X2
|
| 提出日時 | 2021-11-20 15:25:29 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 110 ms / 2,000 ms |
| コード長 | 1,472 bytes |
| コンパイル時間 | 246 ms |
| コンパイル使用メモリ | 82,496 KB |
| 実行使用メモリ | 107,136 KB |
| 最終ジャッジ日時 | 2024-06-11 16:39:27 |
| 合計ジャッジ時間 | 1,129 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 2 |
ソースコード
"""
4箇所が重要
AB CD
A,D が対応している。
B,C も対応している。
消した外側は影響を受けない
→異なるペアの内、もっとも外側を一つ消す必要がある。
左を消すと行ける場合
右を消すといける場合
どっちを消しても行ける場合
を場合分けして包除原理すればよい
偶数文字の場合、
XYXYXY
みたいな場合だとどっちを消しても行ける。
奇数文字の場合
全部同じ必要がある→どっちを消しても~はありえない
消す部分を 回文コア と呼ぶことにしよう。
長さ kの回文の個数は A[k] = 26 ^ ( (k+1)//2 )
長さkの回文コアの数は
if k % 2 == 0 :
B[k] = 2 * (A[k-1] * 25) - 26*25
else:
B[k] = 2 * (A[k-1] * 25)
長さNのほぼ回文の個数は
Bに26^? をしていけばよろし
"""
import sys
from sys import stdin
mod = 998244353
A = [0] * (10**6+1)
A[1] = 26
for i in range(2,len(A)):
if i % 2 == 0:
A[i] = A[i-1]
else:
A[i] = A[i-1] * 26 % mod
B = [0] * (10**6+1)
for k in range(2,len(B)):
if k % 2 == 0:
B[k] = ( 2 * (A[k-1] * 25) - 26 * 25 ) % mod
else:
B[k] = ( 2 * (A[k-1] * 25) ) % mod
C = [0] * (10**6+1)
for k in range(2,len(B)):
C[k] = (C[k-2] * 26 + B[k]) % mod
TT = int(stdin.readline())
mod = 998244353
ANS = []
for loop in range(TT):
ANS.append( str(C[int(stdin.readline())]) )
print ("\n".join(ANS))
SPD_9X2