unratedになってしまったのは残念でしたね。
とはいえ、「解く」ことは大事なので、やってみました。
今回はCまですんなり解けました。
A問題
円周の長さを求める問題でした。
円周の長さを求める公式(直径×π)と、小数の扱いに気を付ければ解けますね。
pythonでは、mathモジュールにpiという定数があるので、これを使えば楽です。
import math R = int(input()) print((R * 2) * math.pi)
B問題
問題を単純化すると、ある値の集合の合計がN以下であるか?を問うてる問題です。
そのため、配列要素の合計を求めるsum
と、if
が使えれば答えが求まります。
N, M = map(int,input().split()) A = list(map(int, input().split())) if N < sum(A): print(-1) else: print(N - sum(A))
C問題
与えられた配列の各要素がいくつずつ出ているか?の結果を別の配列に保持しておくことで答えが出せます。
答えの配列であるans
に対しては、配列要素-1のインデックスに対して1を足すようにします。
N = int(input()) A = list(map(int, input().split())) ans = [0] * N for n in A: ans[n - 1] += 1 for n in ans: print(n)
D問題
10100という、よくわからない数字に惑わされてしまいました。
10100は正直無視してよくて、「0~Nまでの数字から、K個選ぶ」という風に考えると答えが求めやすくなります。
(詳細な解説は以下を見たほうが良いかと。)
N, K = map(int, input().split()) MOD = 10 ** 9 + 7 ans = 0 for k in range(K, N + 2): first = k * (k - 1) / 2 final = (N*2-k+1) * k / 2 add = final - first + 1 ans = (ans + add) % MOD print(int(ans))
今回はここまでですね。
また来週。