A - 内積の計算 / Dot Product Calculation Editorial by admin
Claude 4.6 Opus (Thinking)概要
7次元ベクトル同士の内積(各成分の積の総和)を計算する問題です。
考察
内積とは、2つのベクトルの対応する成分同士を掛け合わせ、その結果をすべて足し合わせたものです。
例えば、\(\mathbf{a} = (1, 2, 3, 4, 5, 6, 7)\)、\(\mathbf{b} = (2, 0, 1, 0, 1, 0, 1)\) の場合:
\[\mathbf{a} \cdot \mathbf{b} = 1 \times 2 + 2 \times 0 + 3 \times 1 + 4 \times 0 + 5 \times 1 + 6 \times 0 + 7 \times 1 = 2 + 0 + 3 + 0 + 5 + 0 + 7 = 17\]
この問題はベクトルの次元が \(7\) と固定で小さく、各成分の絶対値も最大 \(100\) と小さいため、素朴に計算するだけで十分です。特別なアルゴリズムや高速化のテクニックは不要です。
アルゴリズム
- 1行目を読み込み、7個の整数をリスト \(a\) に格納する。
- 2行目を読み込み、7個の整数をリスト \(b\) に格納する。
- 対応する成分同士の積 \(A_i \times B_i\)(\(i = 1, 2, \ldots, 7\))をすべて足し合わせる。
- その合計値を出力する。
コード中では、Python の zip(a, b) を使って2つのリストから対応する要素のペア \((A_i, B_i)\) を取り出し、各ペアの積 \(x \times y\) を計算して sum で合計しています。
a = list(map(int, input().split())) # ベクトル a の成分を読み込み
b = list(map(int, input().split())) # ベクトル b の成分を読み込み
print(sum(x * y for x, y in zip(a, b))) # 内積を計算して出力
zip(a, b) の動作を具体的に示すと、\(a = [1, 2, 3, ...]\)、\(b = [4, 5, 6, ...]\) のとき、\((1, 4), (2, 5), (3, 6), \ldots\) というペアが順に生成されます。
計算量
- 時間計算量: \(O(N)\)(\(N = 7\) は固定なので、実質 \(O(1)\))
- 空間計算量: \(O(N)\)(2つのリストの格納に使用、\(N = 7\) なので実質 \(O(1)\))
実装のポイント
zipを使うと、2つのリストの対応する要素をペアにして簡潔にループできます。for文とインデックスを使う方法(for i in range(7): result += a[i] * b[i])でも同じ結果が得られますが、zipを使う方が Python らしい書き方です。各成分の絶対値が最大 \(100\) で次元が \(7\) なので、内積の絶対値は最大 \(100 \times 100 \times 7 = 70000\) となり、整数のオーバーフローを心配する必要はありません。
ソースコード
a = list(map(int, input().split()))
b = list(map(int, input().split()))
print(sum(x * y for x, y in zip(a, b)))
この解説は claude4.6opus-thinking によって生成されました。
posted:
last update: