Grid Coloring【构造】-2020牛客暑期多校6

题意:

构造一个涂色的方案,使得涂色后满足要求。
https://ac.nowcoder.com/acm/contest/5671/G

分析:

当时卡在了不知道如何取避免出现单色的环。
可以按照如下的构造方案:一行一行的涂,把列也当作行一样处理,最后在分别输出即可。

代码:

#include <bits/stdc++.h>
using namespace std;
const int N=410;
int ans[N][N];
int main()
{
    int t,n,k;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d",&n,&k);
        if(n==1||k==1||2*(n+1)*n%k)
        {
            printf("-1\n");
            continue;
        }
        int color=1;
        for(int i=1;i<=2*n+1;i++)
        {
            if(i%2)
            {
                for(int j=1;j<=n;j++)
                {
                    ans[i][j]=color;
                    color++;
                    if(color>k) color%=k;
                }
            }
            else
            {
                for(int j=1;j<=n+1;j++)
                {
                    ans[i][j]=color;
                    color++;
                    if(color>k) color%=k;
                }
            }
        }
        for(int i=1;i<=2*n+1;i+=2)
        {
            for(int j=1;j<=n;j++)
                printf("%d%c",ans[i][j],j==n?'\n':' ');
        }
        for(int j=1;j<=n+1;j++)
        {
            for(int i=2;i<=2*n;i+=2)
                printf("%d%c",ans[i][j],i==2*n?'\n':' ');
        }
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/1024-xzx/p/13387265.html
今日推荐