AtCoder ABC4週目参戦日記

スポンサーリンク
プログラミング
スポンサーリンク

AtCoderも始めて4週間、1か月ほど経過しました。いろいろ好きなことばかりやっているとアルゴリズムの勉強があまり進みません。今回は、AtCoder Beginner Contest 260への挑戦となりました。実は前日、間違えて、AtCoder Regular Contest 144にエントリーしてしまい、ARC初挑戦を果たしたのですが、こちらの方は1問しか正解できず、まだまだ自分の力不足を痛感したのでした。

そしてABC260の本番を迎えたわけですが、結果は、「ワースト記録」の1問正解でした。B問題でてこずってしまい、最後までACにできず、終了間際にC問題を見て、いけそうな問題だったので、こちらからしたらよかったと、後悔しました。とはいえ、B問題ができなかったのも大きな問題です。リストのソートだけでいける問題でしたが、ソートの仕方がよく分かっていないという何とも情けない結果。普段、データを見たら適当にPandasのDataFrameにぶちこんでおけば何とかなると思っていた自分のスキル不足を痛感しました。競プロはPandasは使えないのですが、リストをうまく使いこなせていないのは反省だと感じ、週末にかけて、「リスト」を総復習しました。(復習の成果は下のリンク)

Pythonのリスト型を基本に立ち戻ってまとめてみた

先週の三角関数といい、いろいろバリエーションがあり、B問題はいろいろ新しい発見があります。

『B – Better Students Are Needed!』の解答

AtCoder Beginner Contest 260
B – Better Students Are Needed!

リストの復習でソートの方法を習得したらリストの並び替えだけで解けました。

# データインプット
N, X, Y, Z = [int(x) for x in input().split()]

# 全員合格の可能性を排除
if N <= (X+Y+Z):
    for i in range(N):
        print(i+1)
    exit()

idx = [x for x in range(1, N+1)]
a = [int(x) for x in input().split()]
b = [int(x) for x in input().split()]

students = [idx, a, b]
students = list(zip(*students))
students = sorted(students, reverse = True, key = lambda a: a[1])
students = students[:X] + sorted(students[X:], reverse = False, key = lambda a:a[0])
students = students[:X] + sorted(students[X:], reverse = True, key = lambda a:a[2])
students = students[:X+Y] + sorted(students[X+Y:], reverse = False, key = lambda a:a[0])
students = students[:X+Y] + sorted(students[X+Y:], reverse = True, key = lambda a:a[1]+a[2])
passed_students = sorted(students[:X+Y+Z], reverse = False, key = lambda a:a[0])

for student in passed_students:
    print(student[0])

今週のレーティング

土曜日のARCで少し上がったものの、日曜日のABCでは1問しか正解できず、足踏みをしてしてしまいました。次週はがんばります。

コメント