AtCoder ABC166
AtCoder ABC166解いた分だけまとめ。
今回はABC3完。Dは考え方は合ってたけど探索する範囲間違ってた 。
そしてレートが388まで到達。次昇格目指してがんばろー!
目次
解説AC
A. A?C
入力結果をもとに出力を場合分けするだけ。秒殺。
ACしたコード
# coding:utf-8 s = input() if s == 'ABC': print('ARC') elif s == 'ARC': print('ABC')
B. Trick or Treat
お菓子持ってないと悪戯されるの酷すぎる笑
お菓子を持っている数をリストですぬけ君毎に集計し、
0個になっている数を数えるだけ。
ACしたコード
# coding:utf-8 n, k = map(int, input().split()) sunuke = [0] * n for i in range(k): d = int(input()) a = list(map(int, input().split())) for person in a: sunuke[person - 1] += 1 print(sunuke.count(0))
C. Peaks
愚直に実装する。
道がない場合も「良い展望台」になるので、展望台ごとに道の本数を集計するリストload
と、
高さを比較した時に高いと判定された回数を集計するリストpeak
を持っておく。
最後に、各展望台ごとにpeak
とload
の値が1以上かつ同じものと、道がない展望台の数を
合計したものが答え。
ACしたコード
# coding:utf-8 n, m = map(int, input().split()) h = list(map(int, input().split())) peak = [0] * n load = [0] * n ans = 0 for i in range(m): a, b = map(int, input().split()) load[a - 1] += 1 load[b - 1] += 1 if h[a - 1] > h[b - 1]: peak[a - 1] += 1 elif h[b - 1] > h[a - 1]: peak[b - 1] += 1 # print(peak) # print(load) for i in range(n): if peak[i] == load[i] and peak[i] != 0: ans += 1 ans += load.count(0) print(ans)
D. I hate Factorization
ここから解説AC。
解いている時に、Xの値が109以下だったのと、
例を見てなんとなくA5の値を数字を埋めながら書き出していって、
多分全探索で行けるところまでは分かってた。
時間切れで間に合わなかった...
A - B = 1
として考えた時に、A^5 - B^5 = X
について、
Xの値が範囲オーバーするのは 120^5 - 119^5
の時なので、
-120から120までで総当りする。
解説ACしたコード
# coding:utf-8 x = int(input()) for i in range(-120, 120): for j in range(-120, 120): if i**5 - j**5 == x: print(i, j) exit()