hirohirohirohirosのブログ

地方国立大学に通う情報系学部4年

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)