結果
問題 |
No.1211 円環はお断り
|
ユーザー |
![]() |
提出日時 | 2025-03-20 20:30:24 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,385 bytes |
コンパイル時間 | 169 ms |
コンパイル使用メモリ | 82,288 KB |
実行使用メモリ | 130,160 KB |
最終ジャッジ日時 | 2025-03-20 20:30:58 |
合計ジャッジ時間 | 5,447 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 36 WA * 5 |
ソースコード
def main(): import sys input = sys.stdin.read data = input().split() N = int(data[0]) K = int(data[1]) A = list(map(int, data[2:2+N])) total = sum(A) low = 1 high = total // K answer = 0 def check(M): if total < M * K: return False current_sum = 0 splits = 0 prefix_splits = [0] * (N + 1) for i in range(N): current_sum += A[i] if current_sum >= M: splits += 1 current_sum = 0 prefix_splits[i + 1] = splits else: prefix_splits[i + 1] = splits if prefix_splits[N] >= K: return True # Compute prefix sums to quickly get suffix sums prefix_sum = [0] * (N + 1) for i in range(N): prefix_sum[i + 1] = prefix_sum[i] + A[i] for i in range(N): suffix_sum = prefix_sum[N] - prefix_sum[i] if suffix_sum < M: continue if prefix_splits[i] >= K - 1: return True return False while low <= high: mid = (low + high) // 2 if check(mid): answer = mid low = mid + 1 else: high = mid - 1 print(answer) if __name__ == "__main__": main()