Official

B - Cutoff Editorial by physics0523


\(0\) 点を取った場合から \(100\) 点を取った場合までを、ループを用いてシミュレーションすることでこの問題を解くことができます。

なお、「総和から最大値と最小値を除いて最終結果とする」部分は、例えば以下の方法で求められます。

  • 各ラウンドの得点を昇順にソートし、先頭と末尾以外の要素を足し合わせる。
  • 最初に全ラウンドの得点を足し合わせ、そこから各ラウンドの得点のうち最大値と最小値を引き去る。

各パターンについて実装例を示します。

実装例 (Python):

N,X = map(int,input().split())
A = list(map(int,input().split()))
A.append(-1)

for last in range(0,101):
    B = A.copy()
    B[N-1] = last
    B.sort()
    sum = 0
    for i in range(1,N-1):
        sum += B[i]
    if sum >= X:
        print(last)
        exit()

print("-1")

実装例 (Python):

N,X = map(int,input().split())
A = list(map(int,input().split()))
A.append(-1)

for last in range(0,101):
    B = A.copy()
    B[N-1] = last
    sum = 0
    ma = 0
    mi = 100
    for p in B:
        sum += p
        ma = max(ma,p)
        mi = min(mi,p)
    score = sum - ma - mi

    if score >= X:
        print(last)
        exit()
    
print("-1")

posted:
last update: