Port 53

明日のための技術メモ

AtCoder ABC156

AtCoder ABC156解いた分だけまとめ。
今回はABC3完。Dも途中まで考えてたけどあとで投稿したらWA返ってきた...

レートはこんな感じ。次くらいで300台行きたい。茶色まで後少し。

f:id:saturn-glave:20200223165747p:plain

目次

A. Beginner

問題文 f:id:saturn-glave:20200223170009p:plain

AtCoderのレート算出式超簡単版らしい(解説放送によれば)
普通に言われていること実装できますか問題なので、素直に実装する。
参加者10回以上の参加者の内部レートの式は、
表示レート + 100×(10-参加回数)であることに注意する。

ACしたコード

#coding:utf-8
n, r = map(int, input().split())

if n >=  10:
    print(r)
else:
    print(r + 100*(10-n))

B. Digits

問題文 f:id:saturn-glave:20200223170835p:plain

10進n進変換したあとの桁数を求める問題。
ということで、10進n進変換の部分だけ関数にした。

ACしたコード

#coding:utf-8

def base(num, n):
    if int(num/n):
        return(base(int(num/n), n)+str(num%n))
    return(str(num%n))

if __name__ == "__main__":
    n, k = map(int, input().split())
    base_num = base(n, k)
    print(len(base_num))

C. Rally

問題文 f:id:saturn-glave:20200223171820p:plain

最初数学問題かと思ったら、入力範囲が100までだったのを良いことに、
全探索でいけることに気づいたのでそれで解いた。
pの場所を全通り見て、参加者の必要体力合計の最小値を更新していく方針。

ACしたコード

#coding:utf-8
n = int(input())
x = list(map(int, input().split()))
ans = 100000000000000000000

for i in range(1, 101):
    p = i
    power = 0
    for j in range(n):
        power += (x[j] - p)*(x[j] - p)
    if power < ans:
        ans = power

print(ans)