3-Coloring(奇偶涂色)

Posted thusloop

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3-Coloring(奇偶涂色)相关的知识,希望对你有一定的参考价值。

3-Coloring
题意:交互题,3种颜色中给定一种颜色,不能用这种颜色涂色,且n*n的棋盘上不能使得相邻的格子同色。
思路:对(i+j)分奇偶进行涂色

#include<bits/stdc++.h>
#define int long long
#define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;
const int inf=2e18+100;
const int maxn=2e5+100;
int a[110][110];
void ask(int p,int x,int y)
{
	a[x][y]=p;
	cout<<p<<" "<<x<<" "<<y<<endl;
}
void solve()
{
	queue<pair<int,int>>q1,q2;
	int n,x;
	cin>>n;
	for(int i=1; i<=n; i++)
	{
		for(int j=1; j<=n; j++)
		{
			if((i+j)%2)q1.push({i,j});
			else q2.push({i,j});
		}
	}
	int cnt1=0,cnt2=0;
	while(cin>>x)
	{
		if(x!=2&&cnt2<(n*n+1)/2)
		{
			auto now=q2.front();
			q2.pop();
			ask(2,now.first,now.second);
			cnt2++;
		}
		else if(x!=1&&cnt1<(n*n)/2)
		{
			auto now=q1.front();
			q1.pop();
			ask(1,now.first,now.second);
			cnt1++;
		}
		else if(x!=3)
		{
			if(!q1.empty())
			{
				auto now=q1.front();
				q1.pop();
				ask(3,now.first,now.second);
				cnt1++;
			}
			else if(!q2.empty())
			{
				auto now=q2.front();
				q2.pop();
				ask(3,now.first,now.second);
				cnt2++;
			}
		}
		if(cnt1+cnt2==n*n)return ;
	}
}
signed main()
{
	solve();
}

以上是关于3-Coloring(奇偶涂色)的主要内容,如果未能解决你的问题,请参考以下文章

模拟D. 3-Coloring——Codeforces Round #712 (Div. 2)

poj 1286 Necklace of Beads

华为OD机试真题Java实现数字涂色真题+解题思路+代码(2022&2023)

BZOJ1260 [CQOI2007]涂色paint(区间dp)

题解 P1283 平板涂色

[算法小练][图][拓扑排序+深度优先搜索] 平板涂色问题