こんにちは, Shinoryoです.
今回はAtCoder Beginner Contest 190を, Pythonで解いてみた結果を書き連ねていこうと思います.
AtCoder Beginner Contest 190 - AtCoder
AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.
目次[非表示]
A - Very Very Primitive Game
愚直に条件を確認します. 基本的にはアメの個数が多い人の勝ちで, アメの個数が同じ場合にはどちらが先手かによって変わります.
# 入力 | |
a, b, c = [int(x) for x in input().split()] | |
# 愚直に条件に合うかどうかを確認 | |
if a > b: | |
print("Takahashi") | |
elif a < b: | |
print("Aoki") | |
else: | |
if c == 0: | |
print("Aoki") | |
else: | |
print("Takahashi") |
B - Magic 3
各魔法に対して, ダメージを与えられる条件を満たしているかを順に確かめていきます.
# 1行目の入力 | |
n, s, d = [int(x) for x in input().split()] | |
# 各魔法に関して, ダメージを与えられるかどうかを確かめる | |
for i in range(n): | |
# 魔法データの入力 | |
x, y = [int(x) for x in input().split()] | |
# ダメージが通るか判定 | |
# 通ったらYesを出力し終了 | |
# 通らなかったらループ続行 | |
if x < s and y > d: | |
print("Yes") | |
exit() | |
# 全魔法でダメージを与えられないときNoを出力 | |
print("No") |
C - Bowls and Dishes
各ボールの置き方に対して, そのボールの置き方で各条件を満たすことができるかを確認し, 結果条件を満たすことができた個数を数えます. その最大値を出力すればよいです.
import itertools | |
# 入力 | |
n, m = [int(x) for x in input().split()] | |
abmatrix = [[int(x) for x in input().split()] for _ in range(m)] | |
k = int(input()) | |
cdmatrix = [[int(x) for x in input().split()] for _ in range(k)] | |
# 答えを入力 | |
ans = 0 | |
# ボールの置き方全てを全探索 | |
for balls in itertools.product(*cdmatrix): | |
# 満たすことができる条件数を計算 | |
cnt = sum(a in balls and b in balls for a, b in abmatrix) | |
# ansよりcntが大きければ, ansを更新 | |
if ans < cnt: | |
ans = cnt | |
# 答えを出力 | |
print(ans) |
D - Staircase Sequences
初項
です. よって, この問題は,
の整数解
を
となります. もし,
また,
は を で割り切れなくなるまで割った数であるとし, の約数を , , , であるとし*2, に という素因数が含まれるとする
と,
# 入力 | |
n = int(input()) | |
# nから因数2を消去する | |
# 消去した回数を知る必要はない | |
while(n % 2 == 0): | |
n //= 2 | |
# nの約数の個数を調べる | |
# その2倍が答えである | |
sqn = int(n**(0.5)) | |
print((sum(n % i == 0 for i in range(1, sqn + 1)) * 2 - (sqn * sqn == n)) * 2) |
E以降
E以降は私の能力不足故に省略いたします.
参考にしたサイト等
- 「解説 - AtCoder Beginner Contest 190」
Editorial - AtCoder Beginner Contest 190
AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.
- nkmk様の「Pythonで複数のリストの直積(デカルト積)を生成するitertools.product」
Pythonで複数のリストの直積(デカルト積)を生成するitertools.product | note.nkmk.me
Pythonで複数のリストの直積(デカルト積)を生成するにはitertools.product()を使う. 10.1. itertools.product() — 効率的なループ実行のためのイテレータ生成関数 — Python 3.6.5 ドキュメント ここでは以下の内容について説明する. 直積(デカルト積)とは itertools.product()の基本的な使い方 同じリストを繰り返し...
脚注
*1 :
の場合:等差数列の和は自然数になり, , はともに自然数になります. の場合:等差数列の和が自然数にならないのであり得ません.
したがって,
*2 : もちろん何個だとしても問題ないです.
*3 :
0 件のコメント:
コメントを投稿 (Please feel free to ask me about your questions! You can use Japanese or English in the comments.)