AtCoder-ABC188 A - Three-Point Shot / B - Orthogonality【Python解答例】
AtCoder Beginner Contest188に出場し今回もC問題まで解くことができました。
この記事ではAおよびB問題の解答例を書いていきます。
AtCoder Beginner Contest 188 - AtCoder
AtCoder Beginner Contest188 A - Three-Point Shot
問題文
バスケットボールの試合が行われており、現在の両チームの得点はX対Yです。ここでX≠Yであることが保証されます。
現在劣勢であるチームが、3ポイントシュートを一本成功させて優勢に立つことはできますか?
つまり、現在得点が低い側のチームが3点を得た場合、そのチームの得点が他方のチームの得点より真に高くなるかを判定してください。
制約
・0≤X≤100
・0≤Y≤100
・X≠Y
・X,Yは整数である
解答例
x, y = map(int,input().split()) if x > y: # xが大きいときはxとyを入れ替える(判定の前に必ずxが小さい状態にする) x, y = y ,x if x + 3 > y: print("Yes") else: print("No")
解説
X対Yの試合中に点数が低いチームが3点シュートを入れて逆転することができるか判定する問題です。
注意点としてXとYのどちらが大きいかわかりません。
また3点を入れても同点でなら解答はNoになります。
判定の条件分けを簡単にするためにXを必ず少ない点数になるように、
Xが大きいときはXとYの値を入れ替えました。
この書き方は簡単に入れ替えられるので便利ですね。
そのあとに問題文通りの条件でif文を使って判定し、結果に応じて回答を出力すればACでした。
AtCoder Beginner Contest188 B - Orthogonality
問題文
2 つの N 次元ベクトル A=(A1,A2,A3,…,AN),B=(B1,B2,B3,…,BN)が与えられます。A と Bの内積が0かどうかを判定してください。
すなわち、A1B1+A2B2+A3B3+⋯+ANBN=0かどうかを判定してください。
制約
・1≤N≤100000
・−100≤Ai≤100
・−100≤Bi≤100
・入力に含まれる値は全て整数である
解答例
n = int(input()) A = list(map(int, input().split())) B = list(map(int, input().split())) ans = 0 for i in range(n): ans += A[i] * B[i] if ans == 0: print("Yes") else: print("No")
解説
2つの同じ次元のベクトルが与えられ、その内積が0か判定する問題です。
内積?ってなってましたが問題文が親切で助かりました (-_-;)
N次元とわかるのでfor文でans変数にAi×Biを足していきます。
ループを抜けたあとにans変数が0かどうかを判定し、結果にあわせて出力すればACでした。
今回 A問題のほうが大変な印象でした。
問題文をよく読まずWAしてしまいました…
しっかり問題文を読んで考えないといけないですね。
次回の記事はC問題の解答例について書いていきたいと思います。
ABC188の関連記事はこちら
ebisuke33.hatenablog.com
ebisuke33.hatenablog.com