AtCoder-ABC187 A - Large Digits / B - Gentle Pairs【Python解答例】
AtCoder Beginner Contest187に出場しC問題まで解くことができました。
この記事ではAおよびB問題の解答例を書いていきます。
AtCoder Beginner Contest 187 - AtCoder
AtCoder Beginner Contest187 A - Large Digits
問題文
整数nに対して、nを十進法で表したときの各桁の和をS(n)で表すことにします。 例えば、S(123)=1+2+3=6です。
2つの3桁の整数A,Bが与えられます。
S(A)とS(B)のうち大きい方の値を求めてください。
制約
・入力は全て整数
・100≤A,B≤999
解答例
a, b = input().strip().split() sa = 0 sb = 0 for i in range(3): sa += int(a[i]) for i in range(3): sb += int(b[i]) if sa > sb: print(sa) else: print(sb)
解説
3桁の整数が2つ与えられ、大きいほうの各桁の和を答える問題です。
3桁の整数をstr型で受け取り、例えば整数Aの場合ではint(a[i])とすることでi桁目の数字を取り出せます。
その値を各桁の和を格納するsaに足していきます。
最後にsaとsbを比較して、大きいほうを出力すればACでした。
AtCoder Beginner Contest187 B - Gentle Pairs
問題文
xy平面上に1,2,…,Nの番号が付けられたN個の点があります。点iは(xi,yi)にあり、N個の点のx座標は互いに異なります。
以下の条件を満たす整数の組(i,j)(i
制約
・入力は全て整数
・1≤N≤10^3
・|xi|,|yi|≤10^3
・i≠jならばxi≠xj
解答例
n = int(input()) X = [] Y = [] for i in range(n): x, y = map(int,input().split()) X.append(x) Y.append(y) ans = 0 if n > 1: for i in range(n-1): for j in range(i+1,n): k = abs((Y[j] - Y[i])/(X[j] - X[i])) if k <= 1: ans += 1 print(ans)
解説
xy座標にN個の点があり、そのうち2点を通る直線の傾きが-1~1となる点の組み合わせの数を求める問題です。
条件にあう点かどうかをすべての組み合わせで試しました。
2重ループでi,jのすべての組み合わせを実行できます。
2点を結ぶ直線の傾きkは(y[j] - y[i]) / (x[j] - x[i])で求まります。
kの値は絶対値としてkが1以下なら、解答となるans変数を1増加させます。
ループが抜けたあとにansを出力すればOKでした。
今回はA,B問題とも少し時間がかかった印象です。
時間がかかるとどんどん焦ってくるので、すばやく解く力も必要ですね。
次回の記事はC問題の解答例について書いていきたいと思います。
ABC187の関連記事はこちら
ebisuke33.hatenablog.com
ebisuke33.hatenablog.com