タムログ

プログラミングについての情報発信をしていきます!

AtCoder Beginner Contest 163 B を Python で

本日行われた AtCoder Beginner Contest 163 B を Python で解説していきます。
前回の ABC 162 の解説が中途半端な状態になっていてすみません😅
また後日解説を上げたいと思います。
それでは解説に移ります。まずは問題文から。
https://atcoder.jp/contests/abc163/tasks/abc163_b


B – Homework


行時間制限: 2 sec / メモリ制限: 1024 MB

配点 : 200 点

問題文

高橋君の夏休みは N 日間です。

夏休みの宿題が M 個出されており、i 番目の宿題をやるには Ai 日間かかります。

複数の宿題を同じ日にやることはできず、また、宿題をやる日には遊ぶことができません。

夏休み中に全ての宿題を終わらせるとき、最大何日間遊ぶことができますか?

ただし、夏休み中に全ての宿題を終わらせることができないときは、かわりに -1 を出力してください。

制約

  • 1≤N≤10^6
  • 1≤M≤10^4
  • 1≤Ai≤10^4

入力

入力は以下の形式で標準入力から与えられる。

N M
A1  AM

出力

高橋君が遊ぶことのできる日数、または、-1 を出力せよ。


入力例 1

41 2
5 6

出力例 1

30

例えば、最初の 5 日間で 1 番目の宿題をやり、その後 30 日間遊んで、最後の 6 日間で 2 番目の宿題をやることで、30 日間遊ぶことができます。


入力例 2

10 2
5 6

出力例 2

-1

宿題を終わらせることができません。


入力例 3

11 2
5 6

出力例 3

0

宿題を終わらせることはできますが、遊ぶことはできません。


入力例 4

314 15
9 26 5 35 8 9 79 3 23 8 46 2 6 43 3

出力例 4

9


解説

全ての宿題をやり終えた後に,残っている夏休みの期間はどれだけかという問題です。
宿題は並行してやれないということなので,A1~AM の全ての数の和が,宿題をやり終えるために必要な日数となります。
この数の和は,A をリストとして受け取ると,sum(A) で表すことができます。
よって,この和を N から引いた値が,残りの夏休みの期間となり,これを出力します。もし,この値が負になった場合は,夏休み中に全ての宿題を終わらせることができないということになるので -1 を出力します。
それでは,以下に解答例を載せておきます。

解答例

n,m = map(int, input().split())
a = list(map(int, input().split()))
 
ans = sum(a)
 
if  ans > n:
    print(-1)
else:
    print(n-ans)

いかがだったでしょうか。
もし分からないところなどがあれば,ぜひコメントしてくださいね!
他の問題も解説しているので,ぜひご覧ください。
それでは!