結果
問題 |
No.78 クジ付きアイスバー
|
ユーザー |
![]() |
提出日時 | 2021-01-17 03:24:53 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 737 bytes |
コンパイル時間 | 224 ms |
コンパイル使用メモリ | 82,176 KB |
実行使用メモリ | 115,200 KB |
最終ジャッジ日時 | 2024-11-29 00:32:45 |
合計ジャッジ時間 | 39,051 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 WA * 1 |
other | AC * 8 WA * 22 TLE * 5 |
ソースコード
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 < v < 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)