Submission #796020

#TimeUsernameProblemLanguageResultExecution timeMemory
796020vjudge1Red-blue table (IZhO19_stones)C++17
100 / 100
26 ms9688 KiB
#include <bits/stdc++.h>
using namespace std;

int score(const vector<vector<int>> &a, int plus) {
	int tr = a[0].size()/2 + 1, tc = a.size()/2 + 1;
	
	int ret = 0;
	for (int i=0; i<(int)a.size(); i++) {
		int cnt = 0;
		for (int c : a[i]) cnt += (c == plus);
		ret += (cnt >= tr);
	}
	for (int j=0; j<(int)a[0].size(); j++) {
		int cnt = 0;
		for (int i=0; i<(int)a.size(); i++) {
			cnt += (a[i][j] != plus);
		}
		ret += (cnt >= tc);
	}

	return ret;
}

vector<vector<int>> transpose(const vector<vector<int>> &a) {
	int n = a.size(), m = a[0].size();
	vector<vector<int>> ret(m, vector<int>(n));
	for (int i=0; i<n; i++) {
		for (int j=0; j<m; j++) {
			ret[j][i] = a[i][j];
		}
	}
	return ret;
}

vector<vector<int>> build(int n, int m, int plus) {
	int tr = m - (m/2 + 1), tc = n/2 + 1;
	vector<vector<int>> ret(n, vector<int>(m, plus));
	for (int i=0, j=0, c=0; j<m && c<tr*n; j++) {
		for (int k=0; k<tc && c<tr*n; k++, i=(i+1 == n ? 0 : i+1), c++) {
			ret[i][j] = plus^1;
		}
	}
	return ret;
}

void solve() {
	int n, m;
	cin >> n >> m;
	
	auto ans1 = build(n, m, 0), ans2 = build(m, n, 1);
	int score1 = score(ans1, 0), score2 = score(ans2, 1);

	if (score2 > score1) {
		swap(score2, score1);
		ans1 = transpose(ans2);
	}

	cout << score1 << '\n';
	for (int i=0; i<n; i++) {
		for (int j=0; j<m; j++) {
			cout << (ans1[i][j] ? '-' : '+');
		}
		cout << '\n';
	}
}

int main(){
	ios_base::sync_with_stdio(0); cin.tie(0);
	int tcs;
	cin >> tcs;
	while (tcs--) {
		solve();
	}
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...