ABC356(Atcoder Beginner Contest)のA~D(A,B,C,D)問題をPythonで解説(復習)
A問題
- ここ2週間それなりに忙しいので,省略します.ごめんなさい.
- コメントを見て下さい.
A.py
"""
<方針>
- ここ2週間それなりに忙しいので,省略します.ごめんなさい.
- コメントを見て下さい.
"""
# 標準入力を受け取る.
N, L, R = map(int, input().split())
# 1〜Nまでの数字のリストを作成する.
ans = list(range(1, N+1))
# L〜Rまでを反転する.0-indexedに注意する.
ans[L-1:R] = list(reversed(ans[L-1:R]))
# 空白くぎりでリストを出力する.
print(*ans)
B問題
- ここ2週間それなりに忙しいので,省略します.ごめんなさい.
- コメントを見て下さい.
B.py
"""
<方針>
- ここ2週間それなりに忙しいので,省略します.ごめんなさい.
- コメントを見て下さい.
"""
N, M = map(int, input().split())
# 取らなきゃいけない栄養素
A = list(map(int, input().split()))
# 実際に取った栄養素
B = [0]*M
# 食べ物を食べていく.
for i in range(N):
# i品目を食べる.
X = list(map(int, input().split()))
# どんな栄養素が取れたかを記録する.
for j in range(M):
# j番目の栄養素を記録する.
B[j] += X[j]
# 全ての栄養素が足りているかを見る.
for i in range(M):
# 足りない栄養素があった時,
if(A[i]>B[i]):
# Noを出力して,プログラムを終了する.
print("No")
exit()
# 全ての栄養素が足りている時,Yesを出力する.
print("Yes")
C問題
- ここ2週間それなりに忙しいので,省略します.ごめんなさい.
- コメントを見て下さい.
C.py
"""
<方針>
- ここ2週間それなりに忙しいので,省略します.ごめんなさい.
- コメントを見て下さい.
"""
N, M, K = map(int, input().split())
# 試した鍵の種類
AA = []
# 鍵が空いたかどうか
R = []
for i in range(M):
CAR = list(map(str, input().split()))
AA.append(list(map(int, CAR[1:-1])))
R.append(True if CAR[-1]=="o" else False)
ans = 0
# 鍵のパターンを全て試す.
for i in range(1<<N):
# 矛盾するとFalseが入る.
ok = True
# 試した鍵のパターンを全て確かめる.
for j in range(M):
# 正しい鍵の数
col = 0
for a in AA[j]:
# 鍵が正しい時,
if(i&(1<<(a-1))):
col += 1
# 矛盾したとき,
if((R[j]) != (col>=K)):
ok = False
# 矛盾してない時,
if(ok):
# 鍵のパターンは合っているものとする.
ans += 1
# 出力
print(ans)
D問題
- ここ2週間それなりに忙しいので,省略します.ごめんなさい.
- コメントを見て下さい.
D.py
"""
<方針>
- ここ2週間それなりに忙しいので,省略します.ごめんなさい.
- コメントを見て下さい.
"""
N, M = map(int, input().split())
MOD = 998244353
# 回数
ans = 0
# Mの各ビットを下から見ていく.
for i in range(60):
# Mとkのi番目のビットが両方とも立つような回数.
b = 0
# i番目のビットだけを立たせた数字.
m = 1 << i
# Mのi番目のビットが立っている時,
if M & m:
# kが取れる全パターンから,m番目のビットが立っているようなパターン数
di, mo = divmod(N+1, 2*m)
# 割った数を足す.
b += di * m
# 余りを足す.
b += max(0, mo - m)
# 答えを足して,MODをとっておく.
ans += b
ans %= MOD
print(ans)
補足
関係するリンク(参考文献など)
筆者について
その他
- 間違いを含んでいる可能性があります.
- 方針と言いつつ,方針ではない感想などを書いている可能性があります.
- A問題から解説がだんだん省略されます.
- コードに書かれている解説の文言と,その上に書いてある解説の文言を変えている場合があります.
最後に一言
- 先週の記事の
最後に一言
にも書いたんですけど,ゲキ忙しくて,解説サボってます...ごめんなさい...