ABC163に参加した。
AtCoder Beginner Contest 163 - AtCoder
AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.
A – Circle Pond
piの出し方を知っていれば簡単。
import math
r = int(input())
ans = 2 * r * math.pi
print(ans)
B – Homework
宿題をするのにかかる日数を合計し、Nから引いた値が答え。
負になる場合は-1を出力する。
n, m = map(int, input().split())
a = list(map(int, input().split()))
ans = max(n - sum(a), -1)
print(ans)
C – management
各値がAに何回登場するか数える。
n = int(input())
a = list(map(int, input().split()))
ans = [0] * n
for i in a:
ans[i - 1] += 1
for i in ans:
print(i)
D – Sum of Large Numbers
10^100は共通項なので無視すと、0, 1, 2, … , N のN+1個の中からK個以上の数を選び、和としてありえる物の個数を数える問題になる。
最小値は下からK個、最大値は上からK個足せば良い。
各値は1刻みなので、最小値から最大値の間の数は全て和としてありえる値になる。
なので、1個選んだ場合、2個選んだ場合、… 、N+1個選んだ場合、と累積和を事前にO(N)で求めておき、Kに関してループを回せば解ける。
n+1個の数があるので、Pythonではn+2の配列が必要になることに注意する。
n, k = map(int, input().split())
mod = 10 ** 9 + 7
cum = [0] * (n + 2)
cum[1] = 1
for i in range(2, n + 2):
cum[i] = i + cum[i - 1]
ans = 0
for j in range(k, n + 2):
small = cum[j]
big = cum[n + 1] - cum[n - j + 1]
ans += big - small + 1
ans %= mod
print(ans % mod)
今回のコンテストはUnratedとなったため、レートは更新されなかった。
コメント