結果
| 問題 |
No.3202 Periodic Alternating Subsequence
|
| コンテスト | |
| ユーザー |
detteiuu
|
| 提出日時 | 2025-07-13 23:07:16 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 451 ms / 2,000 ms |
| コード長 | 1,283 bytes |
| コンパイル時間 | 155 ms |
| コンパイル使用メモリ | 82,336 KB |
| 実行使用メモリ | 256,196 KB |
| 最終ジャッジ日時 | 2025-07-13 23:07:27 |
| 合計ジャッジ時間 | 10,726 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 24 |
ソースコード
T = input()
K = int(input())
MOD = 10**9+7
def matrix(a, b):
ans = [[0]*len(b[0]) for _ in range(len(a))]
for i in range(len(a)):
for j in range(len(b[0])):
ans[i][j] = sum(a[i][k]*b[k][j]%MOD for k in range(len(b)))%MOD
return ans
M = [[]]
N = len(T)
for n in range(7):
dp = [[0]*7 for _ in range(N+1)]
dp[0][n] = 1
for i in range(N):
for j in range(7):
dp[i+1][j] += dp[i][j]
dp[i+1][j] %= MOD
if T[i] == "0":
dp[i+1][0] += dp[i][1]+dp[i][6]
dp[i+1][0] %= MOD
dp[i+1][2] += dp[i][3]+dp[i][1]+dp[i][6]
dp[i+1][2] %= MOD
dp[i+1][4] += dp[i][5]+2*dp[i][3]+dp[i][1]+dp[i][6]
dp[i+1][4] %= MOD
else:
dp[i+1][1] += dp[i][0]+dp[i][6]
dp[i+1][1] %= MOD
dp[i+1][3] += dp[i][2]+dp[i][0]+dp[i][6]
dp[i+1][3] %= MOD
dp[i+1][5] += dp[i][4]+2*dp[i][2]+dp[i][0]+dp[i][6]
dp[i+1][5] %= MOD
M[0].append(dp[-1])
M[0] = list(map(list, zip(*M[0])))
for _ in range(59):
M.append(matrix(M[-1], M[-1]))
ansM = [[0] for _ in range(7)]
ansM[-1][0] = 1
for i in range(60):
if 1<<i & K:
ansM = matrix(M[i], ansM)
print((ansM[4][0]+ansM[5][0])%MOD)
detteiuu