[AtCoder] [經典競程 90 題] 004 - Cross Sum(★2)

題目連結: https://atcoder.jp/contests/typical90/tasks/typical90_d
題目大意:
給一個二維陣列 $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;
} 

留言

這個網誌中的熱門文章

[TIOJ] 1094. C.幼稚國王的獎賞

[Codeforces] 731F. Video Cards

[IOJ] 19. 啦啦啦