제출 #526616

#제출 시각아이디문제언어결과실행 시간메모리
526616Zhora_004Red-blue table (IZhO19_stones)C++17
100 / 100
63 ms1408 KiB
#include <iostream>
#include <vector>
#include <queue>
#define sz(a) ((int)((a).size()))
using namespace std;


vector<vector<bool>> rotate(vector<vector<bool>>& v)
{
	int n = sz(v), m = sz(v[0]);
	vector<vector<bool>> res(m, vector<bool>(n));
	for (int j = m - 1; j >= 0; j--) for (int i = 0; i < n; i++) res[m - j - 1][i] = v[i][j];
	return res;
}

void test_case()
{
	int n, m;
	cin >> n >> m;
	bool rotated = 0;
	if (n > m)
	{
		rotated = 1;
		swap(n, m);
	}
	priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;
	for (int i = 0; i < m; i++) pq.push({ 0, i });
	int till = (n + 1) / 2;
	int cnt = m / 2 + 1;
	vector<vector<bool>> bd(n, vector<bool>(m));
	for (int i = 0; i < n; i++)
	{
		vector<pair<int, int>> vec;
		bool can = 1;
		while (sz(vec) != cnt)
		{
			int a = pq.top().first, b = pq.top().second;
			pq.pop();
			if (a + 1 == till)
			{
				can = 0;
				break;
			}
			vec.push_back({ a + 1, b });
		}
		if (!can) break;
		for (pair<int, int>& p : vec)
		{
			bd[i][p.second] = 1;
			pq.push({ p.first, p.second });
		}
	}
	if (rotated)
	{
		bd = rotate(bd);
		swap(n, m);
		for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) bd[i][j] = !bd[i][j];
	}
	int c = 0;
	for (int i = 0; i < n; i++)
	{
		int a = 0, b = 0;
		for (int j = 0; j < m; j++)
		{
			if (bd[i][j]) a++;
			else b++;
		}
		if (a > b) c++;
	}
	for (int j = 0; j < m; j++)
	{
		int a = 0, b = 0;
		for (int i = 0; i < n; i++)
		{
			if (bd[i][j]) a++;
			else b++;
		}
		if (b > a) c++;
	}
	cout << c << "\n";
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < m; j++)
		{
			if (bd[i][j]) cout << '+';
			else cout << '-';
		}
		cout << "\n";
	}
}

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	int tc;
	cin >> tc;
	while (tc--)
		test_case();

	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...