[AtCoder] [經典競程 90 題] 004 - Cross Sum(★2)
題目連結: https://atcoder.jp/contests/typical90/tasks/typical90_d
題目大意:
給一個二維陣列 $A$ ,請建構另一個二維陣列 $B$ ,使得 $B_{ij}$ 為所有跟 $A_{ij}$ 同行或同列的和 ($A_{ij}$ 自己也算)。
直接照著定義做,然後記得一行的值或一列的值不用每次都重算就好。A
題目大意:
給一個二維陣列 $A$ ,請建構另一個二維陣列 $B$ ,使得 $B_{ij}$ 為所有跟 $A_{ij}$ 同行或同列的和 ($A_{ij}$ 自己也算)。
直接照著定義做,然後記得一行的值或一列的值不用每次都重算就好。A
#include <bits/stdc++.h>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int n, m; cin >> n >> m;
vector<vector<int>> a(n, vector<int>(m));
for (auto &a_i : a) {
for (auto &a_ij : a_i) {
cin >> a_ij;
}
}
vector<vector<int>> b(n, vector<int>(m));
for (int i = 0; i < n; ++i) {
int sm = accumulate(a[i].begin(), a[i].end(), 0);
for (int j = 0; j < m; ++j)
b[i][j] = sm - a[i][j];
}
for (int j = 0; j < m; ++j) {
int sm = 0;
for (int i = 0; i < n; ++i)
sm += a[i][j];
for (int i = 0; i < n; ++i)
b[i][j] += sm;
}
for (auto &b_i : b) {
for (int j = 0; j < m; ++j) {
cout << b_i[j] << " \n"[j == m - 1];
}
}
return 0;
}
留言
張貼留言