結果
問題 |
No.576 E869120 and Rings
|
ユーザー |
![]() |
提出日時 | 2025-03-31 17:49:22 |
言語 | PyPy3 (7.3.15) |
結果 |
MLE
|
実行時間 | - |
コード長 | 1,791 bytes |
コンパイル時間 | 199 ms |
コンパイル使用メモリ | 82,448 KB |
実行使用メモリ | 282,448 KB |
最終ジャッジ日時 | 2025-03-31 17:50:21 |
合計ジャッジ時間 | 8,517 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | -- * 3 |
other | MLE * 2 -- * 25 |
ソースコード
import sys from collections import deque def main(): N, K = map(int, sys.stdin.readline().split()) s = sys.stdin.readline().strip() a = [int(c) for c in s] def check(x): b = [ai - x for ai in a] prefix = [0.0] * (N + 1) for i in range(N): prefix[i+1] = prefix[i] + b[i] # Case 1: Check non-circular segments of length >= K min_prefix = prefix[0] found = False for i in range(1, N + 1): if i >= K: if (i - K) >= 0: min_prefix = min(min_prefix, prefix[i - K]) if prefix[i] - min_prefix >= -1e-9: found = True break if found: return True # Case 2a: Check if sum of entire array is non-negative S = prefix[N] if S >= -1e-9: return True # Case 2b: Check wrap-around segments L = N - K if L <= 0: return False min_sum = float('inf') q = deque() for i in range(1, N + 1): j = i - 1 while q and prefix[j] >= prefix[q[-1]]: q.pop() q.append(j) window_left = max(0, i - L) while q and q[0] < window_left: q.popleft() if q: current_sum = prefix[i] - prefix[q[0]] if current_sum < min_sum: min_sum = current_sum return min_sum <= S + 1e-9 low, high = 0.0, 1.0 for _ in range(100): mid = (low + high) / 2 if check(mid): low = mid else: high = mid print("{0:.15f}".format(low)) if __name__ == '__main__': main()