ABC171

はじめに

この記事では、AtCoder Beginer Contest 171のA~E問題を解説します。

A - alphabet

https://atcoder.jp/contests/abc171/tasks/abc171_a

大文字・小文字の判定にはisupper(), islower()を使うことができます。

1
2
3
4
5
s = input()
if s.isupper():
print('A')
else:
print('a')

B - Mix Juice

https://atcoder.jp/contests/abc171/tasks/abc171_b

ソートとスライスを組みあわせます。

1
2
3
4
N, K = map(int,input().split())
P = list(map(int,input().split()))
P.sort()
print (sum(P[:K]))

C - One Quadrillion and One Dalmatians

https://atcoder.jp/contests/abc171/tasks/abc171_c
ordはpythonの組み込み関数で、Unicodeコードポイントを表す整数を返します。chrはその逆で、整数を受け取り文字を返します。
参考:言語処理100本ノック2020 第1章 準備運動

1
2
3
4
5
6
7
N = int(input())
ans = ''
while(N):
N -= 1
ans+=chr(ord('a')+N % 26)
N //= 26
print (ans[::-1])

D - Replacing

https://atcoder.jp/contests/abc172/tasks/abc172_d

  • 置換のたびに和を計算し直すと間に合いません。そのため、和がどれだけ増えるかを求めます。
  • それぞれの数字がいくつ存在するかは辞書で保持します。
    • getを使うことで、keyが存在しない場合の処理を考えなくてよくなります。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
N = int(input())
A = list(map(int, input().split()))
d = dict()
for a in A:
v = d.get(a, 0)
d[a] = v+1
S = sum(A)
Q = int(input())
B = []
C = []
for q in range(Q):
b, c = map(int,input().split())
v = d.get(b, 0)
S += v*(c-b)
d[b] = 0
d[c] = d.get(c,0) + v
print (S)

E - Red Scarf

https://atcoder.jp/contests/abc172/tasks/abc172_e

配列の要素に対してxor処理を繰り返して一つの値にします。このような処理はreduceと呼ばれます。

1
2
3
4
5
6
from functools import reduce
N = input()
A = list(map(int,input().split()))
S = reduce(lambda x, y : x ^ y, A)
ans = [str(S^a) for a in A]
print (' '.join(ans))

関連記事

過去のABC解説記事です。

  • ABC170
    • A-D問題を解いています。
  • ABC169
    • A-F問題を解いています。
  • ABC168
    • A-E問題を解いています。
  • ABC167
    • A-E問題を解いています。
  • ABC166
    • A-F問題を解いています。
  • ABC165
    • A-F問題を解いています。
  • ABC164
    • A-E問題を解いています。
  • ABC163
    • A-D問題を解いています。
  • ABC162
    • A-E問題を解いています。

記事情報

  • 投稿日:2020年6月22日
  • 最終更新日:2020年6月22日