D問題の壁高すぎますねぇ・・。 (今回のも数学ゲーか?)
C問題までは20分ほどで解けたのでよかったのですが。
A - A?C
if-else
が書ければなんとかなります。
与えられた文字列SがABCか、ARCかで出力する文字列を変化させればよいだけです。
if input() == 'ABC': print('ARC') else: print('ABC')
B - Trick or Treat
少し迷いました。問題の意味がよくわからず・・。
とはいえ、わかってしまえばなんてことはないです。
N, K = map(int, input().split()) ans = [0] * (N) for i in range(K): #d人がお菓子を持っている d = int(input()) #持っている人たち l = list(map(int, input().split())) for j in l: ans[j-1] += 1 a = 0 for i in ans: if i == 0: a += 1 print(a)
C - Peaks
個人的には、これまで解いてきたC問題の中でもかなりすんなり解けた問題でした。
問題文の通りに愚直に書ければよいだけなので、工夫とかもいらないのですが。
肝になるのは、展望台iから展望台jを結んでいることをどのようにデータで表現するかかと思います。
私は配列で実現しました。(以下、コード参照)
N, M = map(int, input().split()) heights = list(map(int, input().split())) roots = [[] for i in range(N)] #展望台aと展望台bを結ぶ道を表す #roots[0] = [1,2]なら、展望台0からは展望台1,2がつながっている for i in range(M): a, b = map(int, input().split()) #0-indexにするため、-1する roots[a-1].append(b-1) roots[b-1].append(a-1) ans = 0 for i in range(len(roots)): root = roots[i] #展望台から道が伸びていなければよい展望台 if not root: ans += 1 continue good = True #道があるなら、自分と、自分とつながっている展望台の高さを比較する for j in root: if heights[i] <= heights[j]: good = False break if good: ans += 1 print(ans)
D - I hate Factorization
わかりませんでした。
C問題までが20分ほどで終わってしまったので、40分ほどは考えていたと思いますが、さっぱりでした。
他の方の提出を見ると、探索でいけるようです。
X = int(input()) for a in range(-500, 500): for b in range(-500, 500): if a ** 5 - b ** 5 == X: print(a, b) exit()
コンテスト中は、「D問題で探索は出ないやろ」と思っていたし、そもそもなぜ-500~500の範囲で解が求まるのかもわかっていません。(5005が1013以上あるからとかそういうことなんだろうか)
教訓としては、とりあえず探索してみるってことなのかな・・。
今回はここまでにします。それでは。