結果
| 問題 | 
                            No.198 キャンディー・ボックス2
                             | 
                    
| コンテスト | |
| ユーザー | 
                             | 
                    
| 提出日時 | 2015-04-29 00:20:47 | 
| 言語 | Python3  (3.13.1 + numpy 2.2.1 + scipy 1.14.1)  | 
                    
| 結果 | 
                             
                                AC
                                 
                             
                            
                         | 
                    
| 実行時間 | 31 ms / 1,000 ms | 
| コード長 | 792 bytes | 
| コンパイル時間 | 203 ms | 
| コンパイル使用メモリ | 12,544 KB | 
| 実行使用メモリ | 10,752 KB | 
| 最終ジャッジ日時 | 2024-11-16 08:58:14 | 
| 合計ジャッジ時間 | 1,992 ms | 
| 
                            ジャッジサーバーID (参考情報)  | 
                        judge4 / judge1 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 4 | 
| other | AC * 26 | 
ソースコード
def read_data():
    B = int(input())
    N = int(input())
    Cs = [int(input()) for i in range(N)]
    return B, N, Cs
def solve(B, N, Cs):
    Cs.sort()
    median = Cs[N//2]
    min_move = sum([abs(median - c) for c in Cs])
    surplus = sum([c - median for c in Cs])
    if surplus + B >= 0:
        return min_move
    return binary_search(Cs, median, B)
def binary_search(Cs, median, B):
    lower = 0
    upper = median
    while upper > lower + 1:
        middle = (lower + upper) // 2
        surplus = sum([c - middle for c in Cs])
        if surplus + B >= 0:
            lower = middle
        else:
            upper = middle
    min_move = sum([abs(lower - c) for c in Cs])
    return min_move
if __name__ == '__main__':
    B, N, Cs = read_data()
    print(solve(B, N, Cs))