結果
| 問題 |
No.1783 Remix Sum
|
| コンテスト | |
| ユーザー |
gew1fw
|
| 提出日時 | 2025-06-12 15:19:09 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
MLE
|
| 実行時間 | - |
| コード長 | 1,969 bytes |
| コンパイル時間 | 183 ms |
| コンパイル使用メモリ | 82,716 KB |
| 実行使用メモリ | 844,424 KB |
| 最終ジャッジ日時 | 2025-06-12 15:19:23 |
| 合計ジャッジ時間 | 4,092 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | MLE * 1 -- * 75 |
ソースコード
import sys
MOD = 120586241
def main():
import sys
input = sys.stdin.read
data = input().split()
idx = 0
N = int(data[idx]); idx +=1
K = int(data[idx]); idx +=1
M = int(data[idx]); idx +=1
T = int(data[idx]); idx +=1
a = list(map(int, data[idx:idx+N]))
a = [x % (10**K) for x in a]
size = 10**K
trans = [[0]*size for _ in range(size)]
for num in a:
s = [0]*K
for i in range(K):
s[i] = (num // (10**i)) % 10
for x in range(size):
allowed = True
for i in range(T):
xi = (x // (10**i)) % 10
yi = s[i]
if xi + yi >= 10:
allowed = False
break
if not allowed:
continue
z = 0
for i in range(K):
xi = (x // (10**i)) % 10
yi = s[i]
if i < T:
zi = xi + yi
else:
zi = (xi + yi) % 10
z += zi * (10**i)
trans[x][z] += 1
def mat_mult(A, B):
res = [[0]*size for _ in range(size)]
for i in range(size):
for k in range(size):
if A[i][k] == 0:
continue
for j in range(size):
res[i][j] = (res[i][j] + A[i][k] * B[k][j]) % MOD
return res
def mat_pow(mat, power):
result = [[0]*size for _ in range(size)]
for i in range(size):
result[i][i] = 1
while power > 0:
if power % 2 == 1:
result = mat_mult(result, mat)
mat = mat_mult(mat, mat)
power //= 2
return result
mat = [row[:] for row in trans]
mat = mat_pow(mat, M)
for i in range(size):
print(mat[0][i] % MOD)
if __name__ == "__main__":
main()
gew1fw