AtCoder ABC171
AtCoder ABC171解いた分だけまとめ。
体調が優れなかったので、今回はコンテスト終わったあとに解きました。
そしてブログの更新ためてるので消化していきます...
目次
A. αlphabet
大文字小文字変換をするだけの問題。
ポイント
- 小文字→大文字は
str.isupper()
- 大文字→小文字は
str.islower()
ACしたコード
# coding:utf-8 a = input() if a.isupper(): print('A') else: print('a')
B. Mix Juice
最小の合計金額がほしいので、金額の小さい順にソートし、k個分の和を出すだけ。
ACしたコード
# coding:utf-8 n, k = map(int, input().split()) p = list(map(int, input().split())) ps = sorted(p) print(sum(ps[0:k]))
C. One Quadrillion and One Dalmatians
CTFでよく使いそうな問題。ASCII変換を応用して、
26で割ったあまりを活用して文字を変換していく。
aのASCIIコードが97なので、それを起点に文字へ起こす。
ACしたコード
# coding:utf-8 n = int(input()) name = '' count = 0 while n > 0: n -= 1 mod = n % 26 name += chr(97 + mod) n = n // 26 print(name[::-1])
D. Replacing
解説AC気味。ぶっちゃけほしいのはAの全要素の和だけなので、
初期のAの和と、要素数と、B→Cに変えた時の増分を求めておく。
そうすることで、一回の操作での増分を更新し、BとCの数を更新しながら
シミュレーションをすることができる
解説ACしたコード
# coding:utf-8 import collections n = int(input()) a = list(map(int, input().split())) q = int(input()) sum_a = sum(a) count = collections.Counter(a) for i in range(q): b, c = map(int, input().split()) diff = (c - b) * count[b] sum_a += diff count[c] += count[b] count[b] = 0 print(sum_a)