ABC221 回想・解説(Python)
目次
前提
AtCoder Biginner Contest221のPythonの解答コードです。
- atcoder: https://atcoder.jp/contests/abc264
A - Seismic magnitude scales
32のマグニチュードの差分の累乗する。
厳密にはマグニチュードが1増加すると√1000倍≒約32倍、つまり2増加すると1,000倍になるらしい。
A, B = map(int, input().split())
print(32 ** (A - B))
B - typo
制約が小さいので、全探索したらよい。
Pythonはshallow copyなので、そこだけ気をつける。
from copy import copy
S = list(input())
T = list(input())
if S == T:
print("Yes")
exit()
for i in range(len(S) - 1):
s = copy(S)
s[i], s[i + 1] = s[i + 1], s[i]
if s == T:
print("Yes")
exit()
print("No")
C - Select Mul
bit全探索ですべての組み合わせを計算して最大値を求める。
N = sorted(input(), reverse=True)
ans = 0
for i in range(1 << len(N)):
l = 0
r = 0
for j in range(len(N)):
if i & (1 << j):
l = l * 10 + ord(N[j]) - ord("0")
else:
r = r * 10 + ord(N[j]) - ord("0")
ans = max(ans, l * r)
print(ans)
D - Online games
プレイヤーがログインまたはログインしなくなった日をソートして、それを順番に見る。
プレイヤーがログインまたはログインしなくなった日の間は変動はないので、そのタイミングの人数と日付を記録して、配列に格納していく。
N = int(input())
AB = [list(map(int, input().split())) for _ in range(N)]
e = []
for A, B in AB:
e.append((A, 1))
e.append((A + B, -1))
e.sort(key=lambda x: x[0])
print(e)
crr = 0
cnt = 0
ans = [0] * (N + 1)
for day, c in e:
period = day - crr
crr = day
ans[cnt] += period
cnt += c
print(*ans[1:])