QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#127406#6644. Red Black Gridxiaoxing666#WA 1ms3656kbC++172.5kb2023-07-19 16:59:022023-07-19 16:59:06

Judging History

你现在查看的是最新测评结果

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-07-19 16:59:06]
  • 评测
  • 测评结果:WA
  • 用时:1ms
  • 内存:3656kb
  • [2023-07-19 16:59:02]
  • 提交

answer

#include<bits/stdc++.h>

using namespace std;

int t, n, k;

void solve()
{
	scanf("%d %d", &n, &k);
	if ( n == 1 )
	{
		puts("Possible");
		cout << "B" << endl;
		return ;
	}
	if (k == 1 || k == 2 * n * (n - 1) - 1)
	{
		puts("Impossible");
		return ;
	}

	if (n == 2)
	{
		if (k == 0)
		{
			cout << "BB" << endl;
			cout << "BB" << endl;
		}
		else if (k == 2)
		{
			cout << "RB" << endl;
			cout << "BB" << endl;
		}
		else if (k == 4)
		{
			cout << "RB" << endl;
			cout << "BR" << endl;
		}
		return ;
	}

	vector<vector<char> > ans(n, vector<char>(n, 'B'));

	if (k == 0)
	{
		ans[0][0] = 'B';
	}
	else if (k == 2)
	{
		ans[0][0] = 'R';
	}
	else if (k == 3)
	{
		ans[0][0]=ans[0][1]='R';
	}
	else if (k == 4)
	{
		ans[0][0] = ans[n - 1][n - 1] = 'R';
	}
	else if (k == 5)
	{
		ans[0][1] = ans[n - 1][n - 1] = 'R';
	}
	else if (k == 7)
	{
		ans[0][1] = ans[n - 1][0] = ans[n - 1][n - 1] = 'R';
	}
	else
	{
		for (int i = 0; i < n; i++)
		{
			for (int j = (i & 1) ^ 1; j < n; j += 2)
			{
				ans[i][j] = 'R';
			}
		}

		int tot = 2 * n * (n - 1);
		if (k & 1)ans[0][1] = 'B';
		tot -= 3;

		vector<pair<int, int> >_change[5];

		for (int i = 0; i < n; i++)
		{
			for (int j = (i & 1); j < n; j += 2)
			{
				if ((k & 1) && abs(i + j - 1) == 1)continue;
				int sub = 4;
				if (i == 0)sub--;
				if (j == 0)sub--;
				if (i == n - 1)sub--;
				if (j == n - 1)sub--;
				_change[sub].push_back({i, j});
			}
		}

		int s2 = _change[2].size(), s3 = _change[3].size();
		int s4 = _change[4].size();
		while (tot - k >= 2 && s2)
		{
			tot -= 2;
			int u = _change[2].back().first, v = _change[2].back().second;
			_change[2].pop_back();
			ans[u][v] = 'R';
			s2 = s2 - 1;
		}
		while (tot - k >= 6 && s3 >= 2)
		{
			tot -= 6;
			int u = _change[3].back().first, v = _change[3].back().second;
			_change[3].pop_back();
			ans[u][v] = 'R';
			u = _change[3].back().first, v = _change[3].back().second;
			_change[3].pop_back();
			ans[u][v] = 'R';
			s3 = s3 - 2;
		}
		while ( tot - k >= 4 && s4)
		{
			tot -= 4;
			int u = _change[4].back().first, v = _change[4].back().second;
			_change[4].pop_back();
			ans[u][v] = 'R';
			s4 = s4 - 1;
		}

		if (tot != k)
		{
			puts("Impossible");
			return ;
		}

	}

	puts("Possible");
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
		{
			cout << ans[i][j];
		}
		cout << endl;
	}
}

int main()
{
	scanf("%d", &t);
	while (t--)
	{
		solve();
	}


	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 0
Wrong Answer
time: 1ms
memory: 3656kb

input:

2
3 6
3 1

output:

Impossible
Impossible

result:

wrong answer Condition failed: "A == B" (test case 1)