Official

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. 1行目を読み込み、7個の整数をリスト \(a\) に格納する。
  2. 2行目を読み込み、7個の整数をリスト \(b\) に格納する。
  3. 対応する成分同士の積 \(A_i \times B_i\)\(i = 1, 2, \ldots, 7\))をすべて足し合わせる。
  4. その合計値を出力する。

コード中では、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: