Codeforces Round #712 (Div. 2) D. 3-Coloring(构造)

我们知道如果用一种颜色把对角网格全涂满的话,剩下的部分是可以随便涂的。(想象一下如果斜线交叉的填满了1,那么空隙的位置要不写2要不写3,女人是无法阻止我们的)

所以我们用1去涂主对角网格,用2去涂副对角网格。一定有一个先涂满。然后就随便涂色了!

斜线的是主对角网格在这里插入图片描述
ac代码

    #include<bits/stdc++.h>
    using namespace std;
    char a[300005];
    struct edge
    {
    
    
        int x,y;
    };
    queue<edge>q1,q2;
    int main()
    {
    
    
        int n;
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
        {
    
    
            if((i+j)%2==0)q1.push({
    
    i,j});
            else q2.push({
    
    i,j});
        }
        for(int i=1;i<=n*n;i++)
        {
    
    
            int t;
            scanf("%d",&t);
            ///如果t是1,我们就用2去涂q2(存储副对角网格)
            ///如果副对角网格满了,就在主对角网格里面随便涂
            if(t==1)
            {
    
    
                if(!q2.empty())
                {
    
    
                    edge p=q2.front();
                    q2.pop();
                    printf("2 %d %d\n",p.x,p.y);
                }
                else
                {
    
    
                    edge p=q1.front();
                    q1.pop();
                    printf("3 %d %d\n",p.x,p.y);
                }
            }
            else if(t==2)
            {
    
    
                if(!q1.empty())
                {
    
    
                    edge p=q1.front();
                    q1.pop();
                    printf("1 %d %d\n",p.x,p.y);
                }
                else
                {
    
    
                    edge p=q2.front();
                    q2.pop();
                    printf("3 %d %d\n",p.x,p.y);
                }
            }
            else if(t==3)
            {
    
    
                if(!q1.empty())
                {
    
    
                    edge p=q1.front();
                    q1.pop();
                    printf("1 %d %d\n",p.x,p.y);
                }
                else
                {
    
    
                    edge p=q2.front();
                    q2.pop();
                    printf("2 %d %d\n",p.x,p.y);
                }
            }
            fflush(stdout);
        }
    }

猜你喜欢

转载自blog.csdn.net/solemntee/article/details/115423754