過去問精選 10 問やってみる2
前回の続きです
第 6 問: ABC 088 B - Card Game for Two (200 点)
https://atcoder.jp/contests/abc088/tasks/abc088_b
降順にソートして、偶数奇数で取り合っていけばOK
N = int(input()) a = list(map(int, input().split())) sum_a = 0 sum_b = 0 a.sort(reverse=True) for i in range(len(a)): if i % 2 == 0: sum_a += a[i] else: sum_b += a[i] print(sum_a - sum_b)
第 7 問: ABC 085 B - Kagami Mochi (200 点)
https://atcoder.jp/contests/abc085/tasks/abc085_b
setで重複をなくしただけ、中身どうなってるんでしょ??
N = int(input()) a = set() for i in range(N): a.add(int(input())) print(len(a))
第 8 問: ABC 085 C - Otoshidama (300 点)
https://atcoder.jp/contests/abc085/tasks/abc085_c
最初、i, j, kを持ちいた3重ループにしていましたが見事にTLEになりました
よくよく考えたら最深部のループはいらなかったです。。。
N, Y = map(int, input().split()) nn = Y // 10000 if (Y // 10000) < N else N mm = Y // 5000 if (Y // 5000) < N else N ll = Y // 1000 if (Y // 1000) < N else N #print(nn, mm, ll) ans = "-1 -1 -1" for i in range(nn+1): for j in range(mm+1): if i + j > N: break if (i * 10000 + j * 5000 + (N-i-j) * 1000) == Y: ans = str(i)+" "+str(j)+" "+str(N-i-j) break print(ans)
第 9 問: ABC 049 C - Daydream (300 点)
https://atcoder.jp/contests/abc049/tasks/arc065_a
正直思いつかず、解説を見てしまいました
後ろから解くといいとのことで、やってみたらすんなりいけました
DPなどもしっかりやれるようになっていきたい・・・
S = input() k = ["dream", "dreamer" ,"erase", "eraser"] ans = "NO" while len(S) > 0: a = len(S) for i in k: if S[-1*len(i):] == i: S = S[0:-1*len(i)] break if a == len(S): break elif len(S) == 0: ans="YES" print(ans)
第 10 問: ABC 086 C - Traveling (300 点)
距離の絶対値を確認したら、偶数奇数で場合分けすることで確認可能
N = int(input()) pos = [0, 0, 0] ans = 'Yes' for i in range(N): t, x, y = map(int, input().split()) if t-pos[0] >= abs(x-pos[1]) + abs(y-pos[2]): if ((t-pos[0]) % 2 == 0) and ((abs(x-pos[1]) + abs(y-pos[2])) % 2 == 0): pos = [t, x, y] elif ((t-pos[0]) % 2 == 1) and ((abs(x-pos[1]) + abs(y-pos[2])) % 2 == 1): pos = [t, x, y] else: ans = 'No' break else: ans = 'No' break print(ans)
とりあえず、全部独力というわけではなかったですが完答できました
次は類似問題にチャレンジしてみます!