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)
华为OD机试真题Java实现数字涂色真题+解题思路+代码(2022&2023)