Atcoder ABC205,203 振り返り
A - kcal【AC】
言われたとおりにやります
A, B = map(int, input().split()) print(A*B/100)
B - Permutation Check【AC】
123……と並び替えることが出来ないというのは,どこかで同じ値が複数あると言うことなので,同一の要素を排除するset型を使う事で判定できます.
N = int(input()) A = set([int(i) for i in input().split()]) print("Yes") if len(A) == N else print("No")
C - POW【AC】
そのままA**C
A, B, C = map(int, input().split()) if C % 2 == 0: if abs(A) == abs(B): print("=") elif abs(A) < abs(B): print("<") else: print(">") else: if A == B: print("=") elif A < B: print("<") else: print(">")
D - Kth Excluded【解説AC】
二分探索を使いそうだという雰囲気はつかんでましたが,どう使えば良いのかは分かりませんでした……
Aiまでにいくつ使える数が存在するかを要素にしたCというリストを用意します.Cに対してkを二分探索します.
kの位置が一番左端の時,使えない数は存在しないのでそのままkを出力します.
kの位置が一番右端の時,使えない数の個数は総数のNなのでk+Nを出力します.
kの位置がその他の時,右端の時と同様に使えない数のA分を+してA+kとしますが,使える数分余計に足してしまっているのでその分のCを引いて出力します.
import bisect N, Q = map(int, input().split()) A = [int(i) for i in input().split()] C = [A[i]-i-1 for i in range(N)] for _ in range(Q): k = int(input()) lower = bisect.bisect_left(C,k) if lower == N: print(k+N) elif lower == 0: print(k) else: print(A[lower-1]+k-C[lower-1])
A - Chinchirorin【AC】
全ての要素が等しければ,その値を表示すれば良いことを利用します.このことにより1番目のサイコロと二番目のサイコロが同じ値なら,3番目のサイコロが同じ値でもそうでなくても3番目のサイコロを表示させれば良いです.
a = sorted([int(i) for i in input().split()]) if a[0] == a[1]: print(a[2]) elif a[1] == a[2]: print(a[0]) else: print(0)
B - AtCoder Condominium【AC】
1からN,1からKまで全てのパターンの部屋が存在するので,そのまま二重ループを使います.
N, K = map(int, input().split()) ans = 0 for n in range(1, N+1): for k in range(1, K+1): ans += n*100+k print(ans)
C - Friends and Travel costs【AC】
シミュレーションをしてどこまで行けるか試します.テストケース3のように同じ場所で複数人の友だちからお金を貰えるパターンもあるので,まずdictでお金を加算していき,リストの形にします.
N, K = map(int, input().split()) money_dic = {} for _ in range(N): a, b = map(int, input().split()) money_dic.setdefault(a, 0) money_dic[a] += b money = [] for i, v in money_dic.items(): money.append([i, v]) money = sorted(money) pos = 0 for i in range(len(money)): if money[i][0] - pos <= K: K -= money[i][0] - pos K += money[i][1] pos = money[i][0] else: pos += K K = 0 break print(pos+K)