AtCoder Beginner Contest 171の感想

ABC171に参加した。

AtCoder Beginner Contest 171 - AtCoder
AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.

A – αlphabet

大文字か小文字か判定するだけ。

s = input()

if s.isupper():
    print('A')
else:
    print('a')

B – Mix Juice

ソートして小さい方から足す。

n, k = map(int, input().split())
p = sorted(list(map(int, input().split())))

ans = sum(p[:k])
print(ans)

C – One Quadrillion and One Dalmatians

アルファベットは全部で26文字なので、26進数と考える。

境界条件で値がずれないように調整する。

n = int(input())
alphabet = 'abcdefghijklmnopqrstuvwxyz'

n -= 1
ans = ''
while n >= 0:
    ans = alphabet[n % 26] + ans
    n //= 26
    n -= 1

print(ans)

D – Replacing

愚直に計算するとO(N^2)になって間に合わない。

差分だけ計算していけばO(N)で解けた。

from collections import Counter

n = int(input())
a = list(map(int, input().split()))
q = int(input())
bc = [list(map(int, input().split())) for _ in range(q)]

x = Counter(a)
ans = sum(a)
for b, c in bc:
    ans += (c - b) * x[b]
    print(ans)
    x[c] += x[b]
    x[b] = 0

E – Red Scarf

XORは交換法則が成り立り、自分同士でXORを取ると0になる

与えられた入力全てのXORを取ると、a1⊕a2⊕…⊕an の値が求まる。

これをSとすると、1つ目の値 a2⊕a3⊕…⊕an とXORを取るとa1が求まる。

以下同様にa2,a3,…,anが求まる。

from functools import reduce

n = int(input())
a = list(map(int, input().split()))

s = reduce(lambda x, y: x ^ y, a)
ans = [s ^ i for i in a]
print(*ans)

始めて本番で5完することが出来て嬉しい。


コメント

タイトルとURLをコピーしました