abc163

今回で5回目のコンテスト参加となりました。今回は「Unrated」になってしまいました。 コロナウイルスの影響で参加者がめちゃくちゃいて、サーバ処理が追いつかなかったんですかね。。コンテストが始まると一気にサーバ負荷がかかるという特殊な状況ですが、運営側には頑張っていただきたいです。
今回はC問題まで解いたので、そこまでの解説をします。

A - Circle Pond

問題文

半径Rの円の周長を出力してください。

制約

  • 1 ≤ R ≤ 100
  • 入力は全て整数である。

解説

Pythonはmath.piで円周率を使えます。

回答

import math

R = int(input())
print(2*R*math.pi)

B - Homework

問題文

高橋君の夏休みはN日間です。
夏休みの宿題がM個出されており、i番目の宿題をやるにはAi日間かかります。
複数の宿題を同じ日にやることはできず、また、宿題をやる日には遊ぶことができません。
夏休み中に全ての宿題を終わらせるとき、最大何日間遊ぶことができますか?
ただし、夏休み中に全ての宿題を終わらせることができないときは、かわりに’-1‘を出力してください。

制約

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

解説

この問題は高橋君の夏休み日数から宿題にかかる全日数を引くだけです。

回答

N, M = [int(_) for _ in input().split()]

A = [int(_) for _ in input().split()]

ans = N
for i in range(M):
    ans -= A[i]

if(ans < 0):
    print("-1")
else:
    print(ans)

C - management

問題文

N人の社員からなる会社があり、各社員には1,…,Nの社員番号が割り当てられています。
社員番号1の社員以外の全ての社員には、自分より社員番号が小さい直属の上司がちょうど1人います。
XさんがYさんの直属の上司であるとき、YさんはXさんの直属の部下であるといいます。
社員番号iの社員の直属の上司の社員番号がAiであることが与えられます。各社員について直属の部下が何人いるか求めてください。

制約

  • 2 ≤ N ≤ 2×10^5
  • 1 ≤ Ai < i

解説

N人分の辞書を作成して、直属の部下だった場合に+1しています。

回答

N = int(input())
A = [int(_) for _ in input().split()]

N_map = {}

for i in range(1, N+1):
    N_map[i] = 0

for i in A:
    if i in N_map:
        N_map[i] += 1

for i in N_map.values():
    print(i)