AtCoder ABC172
AtCoder ABC172解いた分だけまとめ。
Cから緑Diffだった。結果AB2完で終わってしまった。
レート激冷えしたけど茶色は守れてる。
CとDは解説ACで、Cでしゃくとり法が出たのでCだけ別記事にする。
目次
解説AC
A. Calc
やるだけ。Aのn乗は A ** n
と書ける。
ACしたコード
# coding:utf-8 a = int(input()) print(a + a**2 + a**3)
B. Minor Change
2つのリストを1文字ずつ見ていって、差分があればカウントするだけ。
ACしたコード
# coding:utf-8 s = list(input()) t = list(input()) if s == t: print(0) else: ans = 0 for i in range(len(s)): if s[i] != t[i]: ans += 1 print(ans)
C. Tsundoku
ここから解説AC。今回は累積和としゃくとり法の組み合わせにした。
(累積和と二分探索でもいけるらしいが、まとめられればまた別でまとめることに。)
しゃくとり法が初めてだったので、以下の記事にまとめる。
D. Sum of Divisors
sympy使って約数列挙も考えたけどsympy使えない。
解説を読んでいくと、「正の整数 j について、i の倍数かつn以下のものをg(i)とした時、その総和を求める」
問題に置き換えられる。実質、これは等差数列になる。
ここでは j をtmp = n // i として、iを1からnまで動かしながら合計を求める
各g(j)は、 (i * tmp * (tmp + 1)) // 2 となる。
解説ACしたコード
# coding:utf-8 n = int(input()) ans = 0 for i in range(1, n + 1): tmp = n // i ans += i * tmp * (tmp + 1) // 2 print(ans)