結果
| 問題 |
No.3202 Periodic Alternating Subsequence
|
| コンテスト | |
| ユーザー |
kidodesu
|
| 提出日時 | 2025-07-11 23:05:55 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 775 ms / 2,000 ms |
| コード長 | 1,572 bytes |
| コンパイル時間 | 220 ms |
| コンパイル使用メモリ | 82,216 KB |
| 実行使用メモリ | 109,316 KB |
| 最終ジャッジ日時 | 2025-07-11 23:06:21 |
| 合計ジャッジ時間 | 16,587 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 24 |
ソースコード
t = input()
k = int(input())
mod = 10 ** 9 + 7
dp = [[0, 0, 0], [0, 0, 1], [0, 0, 1], [0, 0, 0]]
from copy import deepcopy as cp
for i in range(len(t)):
ndp = cp(dp)
a = int(t[i])
for j in range(4):
if j & 1 != a:
ndp[j^1][0] += dp[j][0] + 2 * dp[j][1] + dp[j][2]; ndp[j^1][0] %= mod
ndp[j^1][1] += dp[j][1] + dp[j][2]; ndp[j^1][1] %= mod
ndp[j^1][2] += dp[j][2]; ndp[j^1][2] %= mod
dp = ndp
B = dp
ans = [[0, 0, 0], [0, 0, 1], [0, 0, 1], [0, 0, 0]]
while k:
if k & 1:
ndp = [[0, 0, 0] for _ in range(4)]
for i in range(4):
for j in range(4):
if i & 1 != (j >> 1) & 1:
nxt = (i & 2) | (j & 1)
ndp[nxt][0] += ans[i][0] * B[j][2] + ans[i][2] * B[j][0] + 2 * ans[i][1] * B[j][1]; ndp[nxt][0] %= mod
ndp[nxt][1] += ans[i][1] * B[j][2] + ans[i][2] * B[j][1]; ans[nxt][1] %= mod
ndp[nxt][2] += ans[i][2] * B[j][2]; ndp[nxt][2] %= mod
ans = ndp
ndp = [[0, 0, 0] for _ in range(4)]
for i in range(4):
for j in range(4):
if i & 1 != (j >> 1) & 1:
nxt = (i & 2) | (j & 1)
ndp[nxt][0] += B[i][0] * B[j][2] + B[i][2] * B[j][0] + 2 * B[i][1] * B[j][1]; ndp[nxt][0] %= mod
ndp[nxt][1] += B[i][1] * B[j][2] + B[i][2] * B[j][1]; ndp[nxt][1] %= mod
ndp[nxt][2] += B[i][2] * B[j][2]; ndp[nxt][2] %= mod
B = ndp
k >>= 1
Ans = 0
for i in range(4):
Ans += ans[i][0]; Ans %= mod
print(Ans)
kidodesu