結果
問題 |
No.3202 Periodic Alternating Subsequence
|
ユーザー |
![]() |
提出日時 | 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)