結果

問題 No.1755 Almost Palindrome
ユーザー 👑 SPD_9X2SPD_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
権限があれば一括ダウンロードができます

ソースコード

diff #

"""

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))
0