【AtCoder】AGC027解説(Python)

AtCoder Grand Contest 027の解説記事です。

目次

AGC027 A – Candy Distribution Again

問題

問題文の要約は以下の通りです。

問題の要約

\(N\) 人の子供に \(x\) 個のお菓子をすべて配り切らなければなりません。子供 \(i\) (\(1 \le i \le N\)) はちょうど \(a_i\) 個のお菓子を貰うと喜ぶとき、喜ぶ子供の人数の最大値を求めよ。

解説

\(a_i\) を昇順にソートして、小さい順にお菓子を配る。

解説

\(a_i\) を昇順にソートして、小さい順にお菓子を配ります。
最後以外の子供は配ることができれば、答えの人数に+1加算をします。
最後の子供はぴったり配り終えることができれば、答えの人数に+1加算になります。

解答

# 入力
N,x=map(int,input().split())
a=list(map(int,input().split()))

# aを昇順でソート
a.sort()
# 答え(喜ぶ子供の人数の最大値)
ans=0

# aの小さい順にお菓子を配る
for i in range(N):
  # 最後の子供はぴったり配り終えたら答え+1
  if i==N-1 and a[i]==x:
    x-=a[i]
    ans+=1
  # 最後以外の子供は配ることができればば答え+1
  elif i<N-1 and a[i]<=x:
    x-=a[i]
    ans+=1
  # 不足していればこれ以上配れないので終了
  else:
    print(ans)
    exit()
# 答えを出力
print(ans)
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次