こんにちは, Shinoryoです.
今回はAtCoder Beginner Contest 187を, Pythonで解いてみた結果を書き連ねていこうと思います.
AtCoder Beginner Contest 187 - AtCoder
AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.
A - Large Digits
数字をint型に変換せず文字列で取得します. 文字列はリストのように○番目の文字を取り出すことができるので, それを利用して各桁の数字の合計を計算します. その後, 大小判定を行います.
# 文字列の数字を入力して、各桁の数字の合計を出力する関数 | |
def digit_sum(str_number): | |
sum = 0 | |
for i in range(len(str_number)): | |
sum += int(str_number[i]) | |
return sum | |
# 文字列として入力 | |
A, B = [x for x in input().split()] | |
# 各桁の数字の合計を計算 | |
sum_A = digit_sum(A) | |
sum_B = digit_sum(B) | |
# 大小判定と出力 | |
if sum_A < sum_B: | |
print(sum_B) | |
else: | |
print(sum_A) |
B - Gentle Pairs
2つの点の組み合わせの全パターンを出し, それぞれに関して傾きが
import itertools | |
# 入力 | |
N = int(input()) | |
xymatrix = [[int(x) for x in input().split()] for _ in range(N)] | |
# 答えを格納する変数 | |
ans = 0 | |
# 2つの点の組み合わせの全パターンを計算 | |
for xy1,xy2 in itertools.combinations(xymatrix,2): | |
if abs(xy1[0] - xy2[0]) >= abs(xy1[1] - xy2[1]): | |
ans += 1 | |
# 出力 | |
print(ans) |
C - 1-SAT
不満な文字列であるための必要条件として, その文字列は
# 入力 | |
N = int(input()) | |
# listではなくset | |
Slist = {input() for _ in range(N)} | |
# Slistに含まれる文字列を全探索 | |
for searchword in Slist: | |
# !を付けたものがSlistに存在するなら、searchwordを出力し終了 | |
if "!"+searchword in Slist: | |
print(searchword) | |
exit() | |
# 求めるものがなければsatisfiableを出力 | |
print("satisfiable") |
D - Choose Me
「高橋氏がある町で演説を行わなかった場合, その町の青木派は全員青木氏に投票し, 高橋派は投票に行きません」ので,
したがって,
# 入力 | |
N = int(input()) | |
yuukensha = [[int(x) for x in input().split()] for _ in range(N)] | |
# X=高橋票-青木票の数を考える | |
# 初期Xは-1*(全青木派有権者) | |
X = 0 | |
for i in range(N): | |
X -= yuukensha[i][0] | |
# i番目の町で演説をすると、Xは2A_i+B_i増える | |
# 演説する数をなるべく減らしたいので、 | |
# 2A_i+B_iのリストをつくりソートする | |
enzetsu_kouka = sorted([2*yuukensha[i][0] + yuukensha[i][1] for i in range(N)], reverse=True) | |
# 答えを格納する変数 | |
ans = 0 | |
# Xに2A_i+B_iを大きい順に足していく | |
# X>0になったら終了 | |
for i in range(N): | |
X += enzetsu_kouka[i] | |
ans += 1 | |
if X > 0: | |
print(ans) | |
exit() | |
# 全ての町で演説したら必ず勝つのでここに来ることはないけど一応 | |
print("error") |
E以降
E以降は私の能力不足故に省略いたします.
参考にしたサイト等
- 「解説 - AtCoder Beginner Contest 187」
Editorial - AtCoder Beginner Contest 187
AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.
- nkmk様による「Pythonで階乗, 順列・組み合わせを計算, 生成」
Pythonで階乗, 順列・組み合わせを計算, 生成 | note.nkmk.me
Pythonの数学関数の標準モジュールmathを使うと階乗を計算できる. これを利用して順列・組み合わせの総数を算出できる. SciPyの関数にも順列・組み合わせの総数を算出するものがある. また, itertoolsモジュールを使うとリスト(配列)などから順列・組み合わせを生成して列挙することができる. ここでは, 階乗: math.facto...
- nkmk様による「Python, set型で集合演算(和集合, 積集合や部分集合の判定など)」
Python, set型で集合演算(和集合, 積集合や部分集合の判定など) | note.nkmk.me
Pythonには標準のデータ型として集合を扱うset型が用意されている. set型は重複しない要素(同じ値ではない要素, ユニークな要素)のコレクションで, 和集合, 積集合, 差集合などの集合演算を行うことができる. 4. 組み込み型 set(集合)型 — Python 3.6.4 ドキュメント ここでは, 基本操作の, setオブジェクトの生成: {}...
- kitadakyou様による「Pythonで"in list"から"in set"に変えただけで爆速になった件とその理由」
Pythonで"in list"から"in set"に変えただけで爆速になった件とその理由 - Qiita
リストの中に特定の要素があるか探す処理 とある競技プログラミングで, 「大量の要素群の中に特定の要素が入っているかチェックする」といった処理を実装する必要がありました. 私は何も考えずに List 型で実装しました. 概ね同じ...
- nkmk様による「Pythonでリストをソートするsortとsortedの違い」
Pythonでリストをソートするsortとsortedの違い | note.nkmk.me
Pythonでリストを昇順または降順にソートするにはsort()とsorted()の2つの方法がある. 文字列やタプルをソートしたい場合はsorted()を使う. ここでは以下の内容について説明する. リスト型のメソッドsort(): 元のリストをソート 組み込み関数sorted(): ソートした新たなリストを生成 文字列, タプルをソートする方法 昇順・...
0 件のコメント:
コメントを投稿 (Please feel free to ask me about your questions! You can use Japanese or English in the comments.)