ABC159に参加した。
AtCoder Beginner Contest 159 - AtCoder
AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.
A – The Number of Even Pairs
偶数+偶数か、奇数+奇数の2通り。
n, m = map(int, input().split())
ans = n * (n - 1) // 2 + m * (m - 1) // 2
print(ans)
B – String Palindrome
逆転させた文字列が元の文字列と一致するか比較する。
s = input()
n = len(s)
s = [s[i] for i in range(n)]
l = (n - 1) // 2
r = (n + 3) // 2
left = s[:l]
right = s[r - 1:]
if s == list(reversed(s)) and left == list(reversed(left)) and right == list(reversed(right)):
print('Yes')
else:
print('No')
C – Maximum Volume
一辺が L / 3 の立方体の時に最大の体積となる。
非常にシンプルかつ記述量が少なく、A問題でも良いような気がした。
l = int(input())
x = l / 3
ans = x ** 3
print(ans)
D – Banned K
O(N^2)になってしまうことが分かりつつも、始めは愚直に実装してTLEになってしまった。
時間内に解けなかったため、コンテスト終了後に再考
始めに、k番目を取り除かずにN個全てを使って2つの整数が等しくなる組み合わせ数を求める。
次に、k番目と等しい整数の組み合わせ数を引く。
集合の演算を考えることでO(N)で解くことができた。
from collections import Counter
n = int(input())
a = list(map(int, input().split()))
if len(a) == len(set(a)):
for i in range(n):
print(0)
else:
kw = Counter(a)
ans = sum([x * (x - 1) // 2 for x in kw.values()])
for i in range(n):
print(ans - kw[a[i]] + 1)
コメント