🥑

# ABC188 B - Orthogonality

2021/01/12に公開

ABC188 B - Orthogonality

問題へのリンク

https://atcoder.jp/contests/abc188/tasks/abc188_b

問題概要

2つの N 次元ベクトル A, Bがある。 A, B の内積 (A_1B_1 + A_2B_2 + \dots + A_NB_N) が0かどうか判定する。

制約

1 \leqq N \leqq 100000
-100 \leqq A_i \leqq 10
-100 \leqq B_i \leqq 100

ABC中の解答

ベクトルと書いているが要はPythonで言うところの要素が N 個のリスト。AB の長さが同じ場合 numpyだと A × B で簡単に要素ごとのかけ算ができるので最後に sum したら内積が計算できる。

import numpy as np
N = int(input())
A = np.array(list(map(int, input().split())))
B = np.array(list(map(int, input().split())))
v = (A * B).sum()
ans = 'Yes' if v == 0 else 'No'
print(ans)

https://atcoder.jp/contests/abc188/tasks/abc188_b

別解1

調べたら内積は dot という関数で計算できるようだ。ほとんど手間は変わらないがせっかくなのでこれからはこっちを使おう。

import numpy as np

N = int(input())
A = np.array(list(map(int, input().split())))
B = np.array(list(map(int, input().split())))

ans = 'Yes' if np.dot(A, B) == 0 else 'No'
print(ans)

https://atcoder.jp/contests/abc188/submissions/19399186

さらにいうと @ 演算子でも計算できるのでより簡単にかける。

import numpy as np

N = int(input())
A = np.array(list(map(int, input().split())))
B = np.array(list(map(int, input().split())))

ans = 'Yes' if A @ B == 0 else 'No'
print(ans)

https://atcoder.jp/contests/abc188/submissions/19401653

Discussion