题意:
构造一个涂色的方案,使得涂色后满足要求。
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
");
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?'
':' ');
}
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?'
':' ');
}
}
return 0;
}