题目链接:点击打开链接
学弟是厉害啊。。
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <queue>
using namespace std;
int vis[110][110],a[110][110],n;
void fuck1()
{
for(int ii=1;ii<=n/2;ii++)//7
{
int i=n,j=ii;
int num=0;
while(1)
{
if(ii%2==1)
{
a[i][j]=2;
if(a[i-1][j]==0)
i--;
else
j++;
}
else
{
a[i][j]=3;
if(a[i-1][j]==0)
i--;
else
j++;
}
num++;
if(num==n)
break;
}
}
int i=n/2+2,j=n/2+1;
int num=0;
while(1)
{
a[i][j]=4;
if(a[i-1][j]==0)
i--;
else
j++;
num++;
if(num==n)
break;
}
for(int ii=(n-1)/2+3;ii<=n;ii++)
{
int i=n,j=ii-2;
int num=0;
while(1)
{
if(ii%2==1)
{
a[i][j]=2;
if(a[i-1][j]==0)
i--;
else
j++;
}
else
{
a[i][j]=3;
if(a[i-1][j]==0)
i--;
else
j++;
}
num++;
if(num==n)
break;
}
}
}
void fuck2()
{
for(int ii=1;ii<=n/2;ii++)//9
{
int i=n,j=ii;
int num=0;
while(1)
{
if(ii%2==1)
{
a[i][j]=2;
if(a[i-1][j]==0)
i--;
else
j++;
}
else
{
a[i][j]=3;
if(a[i-1][j]==0)
i--;
else
j++;
}
num++;
if(num==n)
break;
}
}
int i=n/2+2,j=n/2+1;
int num=0;
while(1)
{
a[i][j]=4;
if(a[i-1][j]==0)
i--;
else
j++;
num++;
if(num==n)
break;
}
for(int ii=(n-1)/2+3;ii<=n;ii++)
{
int i=n,j=ii-2;
int num=0;
while(1)
{
if(ii%2==1)
{
a[i][j]=2;
if(a[i-1][j]==0)
i--;
else
j++;
}
else
{
a[i][j]=3;
if(a[i-1][j]==0)
i--;
else
j++;
}
num++;
if(num==n)
break;
}
}
}
void fuck3()
{
for(int ii=1;ii<=n/2;ii++)//10
{
int i=n,j=ii;
int num=0;
while(1)
{
if(ii%2==1)
{
a[i][j]=2;
if(a[i-1][j]==0)
i--;
else
j++;
}
else
{
a[i][j]=3;
if(a[i-1][j]==0)
i--;
else
j++;
}
num++;
if(num==n)
break;
}
}
int i=n/2+2,j=n/2+1;
int num=0;
while(1)
{
a[i][j]=4;
if(a[i-1][j]==0)
i--;
else
j++;
num++;
if(num==n)
break;
}
for(int ii=n/2+3;ii<=n;ii++)
{
int i=n,j=ii-2;
int num=0;
while(1)
{
if(ii%2==1)
{
a[i][j]=2;
if(a[i-1][j]==0)
i--;
else
j++;
}
else
{
a[i][j]=3;
if(a[i-1][j]==0)
i--;
else
j++;
}
num++;
if(num==n)
break;
}
}
}
void fuck4()
{
for(int ii=1;ii<=n/2;ii++)//8
{
int i=n,j=ii;
int num=0;
while(1)
{
if(ii%2==1)
{
a[i][j]=2;
if(a[i-1][j]==0)
i--;
else
j++;
}
else
{
a[i][j]=3;
if(a[i-1][j]==0)
i--;
else
j++;
}
num++;
if(num==n)
break;
}
}
int i=n/2+2,j=n/2+1;
int num=0;
while(1)
{
a[i][j]=4;
if(a[i-1][j]==0)
i--;
else
j++;
num++;
if(num==n)
break;
}
for(int ii=n/2+3;ii<=n;ii++)
{
int i=n,j=ii-2;
int num=0;
while(1)
{
if(ii%2==0)
{
a[i][j]=3;
if(a[i-1][j]==0)
i--;
else
j++;
}
else
{
a[i][j]=2;
if(a[i-1][j]==0)
i--;
else
j++;
}
num++;
if(num==n)
break;
}
}
}
int main ()
{
int t;
while(scanf("%d",&t)!=EOF)
{
while(t--)
{
memset(a,0,sizeof(a));
scanf("%d",&n);
if(n==1)
printf("Y\n");
else if(n==2||n==3||n==4)
printf("No solution!\n");
else if(n==6)
{
printf("YYYYYY\n");
printf("RRBBBB\n");
printf("YRRRRB\n");
printf("YYBBGB\n");
printf("YYBBGG\n");
printf("YBBGGG\n");
}
else
{
memset(a,0,sizeof(a));
for(int i=1;i<=n;i++)
a[1][i]=1;
if(n%2==1)//奇数
{
if((n/2)%2==1)//7
fuck1();
else//9
fuck2();
}
else
{
if((n/2)%2==1)//10
fuck3();
else//8
fuck4();
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
//printf("%d",a[i][j]);
if(a[i][j]==1)
printf("Y");
else if(a[i][j]==2)
printf("G");
else if(a[i][j]==3)
printf("R");
else if(a[i][j]==4)
printf("B");
}
printf("\n");
}
}
}
}
return 0;
}