ABC171 復習
ABC171の復習です。
結果だけ先に書くと、A、B、Dの3問正解でした。
A - αlphabet
A問題はいつも通り、簡単なif文が書ければ解けますね。
また、小文字であるかどうか、はpythonではislower
を使用することで簡単に求めることができます。ほかの言語でもおそらく似たようなメソッドはあるのではないでしょうか。
s = input() if s.isupper(): print('A') else: print('a')
B - Mix Juice
要素の中からK個を足し合わせてできる最小値を求める問題です。
こういった場合はソートをして小さい順に並べた要素からK個を足していくのがいいですね。pythonでは以下のような回答になります。
n, k = map(int, input().split()) p = list(map(int, input().split())) p.sort() ans = sum(p[:k]) print(ans)
C - One Quadrillion and One Dalmatians
今度やる!
D - Replacing
D問題は、TLEに気をつけて実装する問題です。
求めたいのは和だけですので、初期状態の和から、入力された値を足したり引いたりしていくのがいいです。
例えば、b = 2, c = 5の場合、全体の和から増加するのは(5-2) * 現在の2の個数
となります。 (当然ながら、b > cであれば全体の和から減算されることになります。)
なお、ここで「現在の2の個数」のようにある数値の個数を記録しておく必要があるのですが、これはmapやディクショナリといったデータ構造を扱うことで簡単に実現できます。pythonであればCounter
を使うのがいいでしょう。
加減算をした後、各数値の数の変化も忘れないように。
from collections import Counter n = int(input()) a = list(map(int, input().split())) counts = Counter(a) q = int(input()) total = sum(a) for i in range(q): b, c = map(int, input().split()) if b < c: total += (c - b) * counts[b] counts[c] += counts[b] counts[b] = 0 else: total -= (b - c) * counts[b] counts[c] += counts[b] counts[b] = 0 print(total)