Port 53

明日のための技術メモ

AtCoder ABC166

AtCoder ABC166解いた分だけまとめ。
今回はABC3完。Dは考え方は合ってたけど探索する範囲間違ってた 。
そしてレートが388まで到達。次昇格目指してがんばろー!

目次

解説AC

A. A?C

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

問題文

入力結果をもとに出力を場合分けするだけ。秒殺。

ACしたコード

# coding:utf-8
s = input()

if s == 'ABC':
    print('ARC')
elif s == 'ARC':
    print('ABC')

B. Trick or Treat

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

問題文

お菓子持ってないと悪戯されるの酷すぎる笑
お菓子を持っている数をリストですぬけ君毎に集計し、
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

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

問題文

愚直に実装する。
道がない場合も「良い展望台」になるので、展望台ごとに道の本数を集計するリストloadと、
高さを比較した時に高いと判定された回数を集計するリストpeakを持っておく。
最後に、各展望台ごとにpeakloadの値が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

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

問題文

ここから解説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()