結果
問題 | No.78 クジ付きアイスバー |
ユーザー |
![]() |
提出日時 | 2021-01-17 03:26:49 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 740 bytes |
コンパイル時間 | 320 ms |
コンパイル使用メモリ | 82,368 KB |
実行使用メモリ | 61,888 KB |
最終ジャッジ日時 | 2024-11-29 00:40:40 |
合計ジャッジ時間 | 3,129 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 WA * 3 |
other | AC * 5 WA * 30 |
ソースコード
n,k = map(int,input().split()) *s, = map(int,input()) INF = 1000 nxt = [0]*n val = [0]*n for i in range(n): v = s[i] ii = i+1 while 0 < ii-i < 200: v -= 1 v += s[ii%n] ii += 1 nxt[i] = ii%n val[i] = ii-i if v==0 else k+1 nxt = [nxt] val = [val] for _ in range(32): nn = [nxt[-1][nxt[-1][i]] for i in range(n)] nxt.append(nn) nn = [val[-1][i] + val[-1][nxt[-1][i]] for i in range(n)] val.append(nn) def check(x): #x回遷移でval>=k? v = idx = 0 for i in range(31): if x>>i&1: v += val[i][idx] idx = nxt[i][idx] return v >= k ng = 0 ok = k while ok-ng>1: mid = (ok+ng)//2 if check(mid): ok = mid else: ng = mid print(ok)