AtCoder Beginner Contest 163にPythonで参加しました。Unratedになってしまいました。
A – Circle Pond
問題
半径Rの円の周長を出力してください。
自分の回答
x = float(input())
print(x * 2 * 3.141592)
入力された値に2と円周率をかければ良いですね。
B – Homework
問題
高橋君の夏休みはN日間です。
夏休みの宿題がM個出されており、i番目の宿題をやるにはAi日間かかります。
複数の宿題を同じ日にやることはできず、また、宿題をやる日には遊ぶことができません。
夏休み中に全ての宿題を終わらせるとき、最大何日間遊ぶことができますか?
ただし、夏休み中に全ての宿題を終わらせることができないときは、かわりに -1
を出力してください。
自分の回答
N, M = map(int, input().split())
works = list(map(int,input().split()))
if N >= sum(works):
print(N - sum(works))
else:
print("-1")
夏休みの日数N、宿題にかかる日数sum(works)の大きさを比べて、Nの方が大きければ、遊ぶ日数があるということなので、N – sum(works)を出力します。
C – management
自分の回答(誤)
# 誤回答
N = int(input())
works = list(map(int, input().split()))
for i in range(1,N + 1):
print(works.count(i))
毎度お馴染み、誤回答から。これだと、実行時間超過になります。Nが多くなってくると、いちいちcountをしているとあっという間に、時間が超過してしまいます。
自分の回答(正)
# 正解
N = int(input())
works = list(map(int, input().split()))
ans = [0] * (N + 1)
for i in range(0,N - 1):
ans[works[i]] += 1
ans.pop(0)
for i in ans:
print(i)
まずは、初期値0のリストansを用意します。
そして、リストworksの値を先頭から取り出して、その値でansの位置を指定します。そして、指定した場所の値にプラス1をして行きます。
出力する前に、先頭を削除してから、出力して行きます。
感想
今回は結構早くC問題まで解けました。しかし、Unratedになってしまったのが残念です。