AtCoder Beginner Contest 356の解答等をまとめました
A問題
言われたとおりにする
A
n, l, r = map(int, input().split())
ans = [i for i in range(1, l)] + [i for i in range(r, l - 1, -1)] + [i for i in range(r + 1, n + 1)]
print(*ans)
B問題
forループで計算する
B
n, m = map(int, input().split())
a = list(map(int, input().split()))
for _ in range(n):
b = list(map(int, input().split()))
for i in range(m):
a[i] -= b[i]
print("Yes" if all(a_i <= 0 for a_i in a) else "No")
C問題
bitを使って正しい鍵のパターンを全通り用意し、シミュレーションする
C
n, m, k = map(int, input().split())
ok, ng = [], []
for _ in range(m):
c, *a, r = input().split()
if r == "o":
ok.append(list(map(lambda x: int(x) - 1, a)))
else:
ng.append(list(map(lambda x: int(x) - 1, a)))
ans = 0
for bit in range(1 << n):
flag = True
for ok_i in ok:
cnt = 0
for i in ok_i:
if bit >> i & 1:
cnt += 1
if cnt < k:
flag = False
for ng_i in ng:
cnt = 0
for i in ng_i:
if bit >> i & 1:
cnt += 1
if cnt >= k:
flag = False
if flag:
ans += 1
print(ans)
D問題
2進数の桁ごとに考える
公式解説と同じような解法なので貼り付けときます
D
n, m = map(int, input().split())
mod = 998244353
ans = 0
for i in range(59, -1, -1):
if m >> i & 1:
if n >> i & 1:
ans += n % (2 ** (i + 1)) - (2 ** i) + 1
ans += n // (2 ** (i + 1)) * (2 ** i) % mod
ans %= mod
print(ans)