問題
https://onlinejudge.u-aizu.ac.jp/courses/lesson/2/ITP1/6/ITP1_6_D (新しいタブで開く)
問題文
n × m n \times m n × m 行列 A A A と m × 1 m \times 1 m × 1 行列 b b b が与えられる。
A A A と b b b の積 c c c を出力してね。
制約
1 ≤ n , m ≤ 100 1 \le n, m \le 100 1 ≤ n , m ≤ 100
0 ≤ a i j , b i ≤ 1000 0 \le a_{ij}, b_i \le 1000 0 ≤ a ij , b i ≤ 1000
サンプル
I/O 1
3 4
1 2 0 1
0 3 0 1
4 1 1 0
1
2
3
0
5
6
9
A = ( 1 2 0 1 0 3 0 1 4 1 1 0 ) , b = ( 1 2 3 0 ) A = \begin{pmatrix} 1 & 2 & 0 & 1 \\ 0 & 3 & 0 & 1 \\ 4 & 1 & 1 & 0 \end{pmatrix}, b = \begin{pmatrix} 1 \\ 2 \\ 3 \\ 0 \end{pmatrix} A = 1 0 4 2 3 1 0 0 1 1 1 0 , b = 1 2 3 0 なので、c = ( 5 6 9 ) c = \begin{pmatrix} 5 \\ 6 \\ 9 \end{pmatrix} c = 5 6 9 となる。
考察
定義から c c c は n × 1 n \times 1 n × 1 行列になって、 c i = ∑ j = 1 m a i j b j c_i = \sum_{j=1}^m a_{ij} b_j c i = ∑ j = 1 m a ij b j で求められる。
あとはやるだけ。
コード
https://onlinejudge.u-aizu.ac.jp/status/users/a01sa01to/submissions/1/ITP1_6_D/judge/6370748/C++17 (新しいタブで開く)
int main ( ) {
int n, m;
cin >> n >> m;
vector a ( n, vector < int > ( m) ) ;
rep ( i, n) rep ( j, m) cin >> a[ i] [ j] ;
vector< int > b ( m) ;
rep ( i, m) cin >> b[ i] ;
vector< int > ans ( n, 0 ) ;
rep ( i, n) {
rep ( j, m) ans[ i] += a[ i] [ j] * b[ j] ;
}
rep ( i, n) cout << ans[ i] << endl;
return 0 ;
}