LoginSignup
0
0

『分かりやすさMax!』Atcoder Beginners contest 321 "CutOff"を解説してみた…

Posted at

Atcoder Beginners contest 321 "CutOff"解説 In Python

今回はついこないだ解いたCutOffという問題をPythonで解説していきます。
過去問として解いていくときの参考になれば幸いです。

問題

問題文にはいろんなことが書いてありますが、僕なりに要約するとこんな感じです。
分かりにくかったら下のリンクから問題文を読んでください。

  • Nラウンド行われる試験がある
  • 各ラウンドには0-100のスコアが存在する
  • 総合的なスコアは最低値と最大値を除いたものになる
  • iラウンド目のスコアはAi
  • **最終結果(総合的なスコア)をX点以上にするためには何点取る必要があるか?
  • もし100点をとってもX点以上にならない場合-1を出力しろ。**

入力方法
N X
A1 A2 A3 .....

アルゴリズム

今回のアルゴリズムはこんな感じ。
まずこの問題では得点は下の画像の様に、最大値でも最小値でもない数字の合計点が得点となっています。

なのでもしX点を超えれるのかどうか知りたいのであれば、この得点のデータに0-100点まで各ケースを調べれば良いです。各ケースを調べて最大点である100点をとってもX点にならないのなら問題文の通り”-1”を出力すればいいですし、もしX点になるために必要な得点が0-100にあったのならその必要な得点を出力するだけでバッチリです。

これをコードに落とし込んでいきます。

Pythonでの回答例

Pythonで実際にACしたコードです。
コメントもついているので、ぜひ参考程度にお読みください。

# -*- coding: utf-8 -*-
#まず数字を受け取る
N, X = map(int, input().split())
As = [int(x) for x in input().split()]
#次にAsを低い順からソート
As = sorted(As)
#100回繰り返す
for x in range(0,101):
    scorenow = As[0:len(As)]
    #↑ScoreをAsの入力された初期値にリセット
    scorenow.append(x)
    #今のスコアの最大値を消す
    scorenow.remove(max(scorenow))
    #今度は最低値を消す
    scorenow.remove(min(scorenow))
    #もしスコアがXより大きかったらPrintして終了
    if sum(scorenow) >= X:
        print(x)
        exit()
    else:
        continue
#でなければ-1を出力
print(-1)
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0