hirohirohirohirosのブログ

地方国立大学に通う情報系学部4年

Atcoder 灰diff埋め ABC-like004~ABC-like006 振り返り

ARC-like005 B - Contests【AC】

 1問目が3つ,2問目が5つ,3問目が2つ存在したとき開催できるコンテストの最大値は2回です.なぜなら,異なるコンテストの間で問題の重複があってはいけないので,3つコンテストを開催しようとすると3問目が重複してしまうためです.つまり,この問題は1問目となる問題の個数,2問目となる問題の個数,3問目となる問題の個数をそれぞれ数え,その最小値が答えとなります.
 問題の個数を数えるにはfor文を使って全ての問題に対し,if文を使って問題の条件分岐をさせます.
 4行目のa, b, c = 0, 0, 0はpythonのアンパック機能を用いた書き方になります.pythonはこのように並べることによって同時に変数を入れる事ができます.
 この書き方は他にも応用が効きます.例えばaとbの値を入れ替える処理を考えます.1つはc = bというようにbの値をcに入れておき,b = a a = cとするやり方があります.しかしこれではaとbの値を入れ替えるだけで3行も使ってしまいます.そこでアンパック機能を使います.a, b = b, aと書くのです.こうすることで,1行で処理を完了することができ,シンプルで見やすいコードにする事ができます.

N = int(input())
A, B = map(int, input().split())
P = [int(i) for i in input().split()]
a, b, c = 0, 0, 0

for p in P:
    if p <= A:
        a += 1
    elif p <= B:
        b += 1
    else:
        c += 1
print(min(a, b, c))