ebisukeプログラミング初心者脱出黙示録

30歳を過ぎてから始めたプログラミングと競プロの記録。Pythonで取り組んでいます。Arduinoで電子工作も

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

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

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