結果

問題 No.1004 サイコロの実装 (2)
コンテスト
ユーザー miya145592
提出日時 2023-05-20 04:32:37
言語 PyPy3
(7.3.15)
結果
WA  
実行時間 -
コード長 1,025 bytes
コンパイル時間 148 ms
コンパイル使用メモリ 82,316 KB
実行使用メモリ 67,132 KB
最終ジャッジ日時 2024-12-21 05:39:21
合計ジャッジ時間 3,010 ms
ジャッジサーバーID
(参考情報)
judge4 / judge5
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2
other AC * 6 WA * 30 RE * 2
権限があれば一括ダウンロードができます

ソースコード

diff #

a, b, x, N = map(int, input().split())
X = [x]
while True:
    nxt = (X[-1]*a+b)%6
    if nxt in X:
        break
    X.append(nxt)

nowT = 0
nowA = 0

cntT = [0, 0]
cntA = [0, 0]

seenT = set()
seenA = set()

cnt = -1
si = 0
for i in range(N):
    saiT = X[si%len(X)]+1
    if (nowT, saiT) in seenT:
        cnt = i+1
        break
    seenT.add((nowT, saiT))
    nowT += saiT
    nowT %= 2
    cntT[nowT]+=1
    
    si += 1
    saiA = X[si%len(X)]+1
    if (nowA, saiA) in seenA:
        assert()
        break
    seenA.add((nowA, saiA))
    nowA += saiA
    nowA %= 2
    cntA[nowA]+=1

    si+=1

if cnt==-1:
    scoT = min(cntT)
    scoA = min(cntA)
    print(scoT, scoA)
    exit()

c = N//cnt
m = N%cnt

cntT = [cntT[0]*c, cntT[1]*c]
cntA = [cntA[0]*c, cntA[1]*c]

for i in range(m):
    saiT = X[si%len(X)]+1
    nowT += saiT
    nowT %= 2
    cntT[nowT]+=1
    
    si += 1
    seenA.add((nowA, saiA))
    nowA += saiA
    nowA %= 2
    cntA[nowA]+=1

    si+=1

scoT = min(cntT)
scoA = min(cntA)
print(scoT, scoA)
0