AtCoder Beginner Contest 366の解答等のまとめ
A問題
大きいほうを2倍して比べる
A
n, t, a = map(int, input().split())
print("Yes" if max(t, a) * 2 > n else "No")
B問題
100行用意して入れていく
出力する順番と逆になっているので反転させて、余計な*を消す
B
n = int(input())
t = [[] for _ in range(100)]
for _ in range(n):
s = input()
for i in range(100):
if i < len(s):
t[i].append(s[i])
else:
t[i].append("*")
for t_i in t:
T = "".join(t_i[::-1]).rstrip("*")
if T:
print(T)
C問題
セットと辞書で対応する
C
s = set()
d = [0] * (10 ** 6 + 10)
for _ in range(int(input())):
com = list(map(int, input().split()))
if com[0] == 1:
x = com[1]
s.add(x)
d[x] += 1
elif com[0] == 2:
x = com[1]
d[x] -= 1
if d[x] <= 0:
s.discard(x)
else:
print(len(s))
D問題
3次元の累積和と包含関係を利用する
D
n = int(input())
a = [[list(map(int, input().split())) for _ in range(n)]for _ in range(n)]
for i in range(n - 1):
for j in range(n):
for k in range(n):
a[i + 1][j][k] += a[i][j][k]
for i in range(n):
for j in range(n - 1):
for k in range(n):
a[i][j + 1][k] += a[i][j][k]
for i in range(n):
for j in range(n):
for k in range(n - 1):
a[i][j][k + 1] += a[i][j][k]
def get(x, y, z):
if x >= 0 and y >= 0 and z >= 0:
return a[x][y][z]
else:
return 0
for _ in range(int(input())):
lx, rx, ly, ry, lz, rz = map(lambda x:int(x) - 1, input().split())
lx -= 1
ly -= 1
lz -= 1
print(get(rx, ry, rz)
- get(lx, ry, rz) - get(rx, ly, rz) - get(rx, ry, lz)
+ get(lx, ly, rz) + get(lx, ry, lz) + get(rx, ly, lz)
- get(lx, ly, lz))