結果
問題 | No.1755 Almost Palindrome |
ユーザー | 👑 SPD_9X2 |
提出日時 | 2021-11-20 15:25:29 |
言語 | PyPy3 (7.3.13) |
結果 |
AC
|
実行時間 | 159 ms / 2,000 ms |
コード長 | 1,472 bytes |
コンパイル時間 | 1,049 ms |
コンパイル使用メモリ | 86,872 KB |
実行使用メモリ | 108,312 KB |
最終ジャッジ日時 | 2023-09-02 09:56:24 |
合計ジャッジ時間 | 1,565 ms |
ジャッジサーバーID (参考情報) |
judge15 / judge14 |
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 107 ms
99,444 KB |
testcase_01 | AC | 107 ms
99,604 KB |
testcase_02 | AC | 159 ms
108,312 KB |
ソースコード
""" 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))