网络赛B题,当时看到这个题吓尿了,完全没想法好么,还以为是个数学题要解个方程什么的。。。。看到那么多人过很是没想通
下来看题解。。。妈蛋,就是一个简单的构造题,好吧智商被压制了、、、
看了一下别人的题解然后自己实现的一下,如果当时没被吓着说不定还能往构造的方向努力一下Orz。。
#include<iostream>
#include<sstream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<queue>
#include<map>
#include<time.h>
#include<set>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
#define inf 0x7fffffff
#define lc l,m,index<<1
#define rc m+1,r,index<<01|1
#define max_n 100005
#define mod 1000000007
#define FOR(i,s,t) for(int i=(s);i<=(t);++i)
#define LL long long
char s[105][105];
char c[2]={'G','R'};
void solve(int n)
{
//create
int t=0;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
s[i][j]='B';
}
for(int i=0;i<n;i++)
s[0][i]='Y';
s[1][1]=s[1][0]=c[t];
for(int i=2;i<n;i++)
s[i][0]=c[t];
//half
t++;
t%=2;
for(int j=2;j<=n/2;j++)
{
int C=1;
while(C<=j)
s[C++][j]=c[t];
s[j][j-1]=c[t];
C=j;
while(C<n)
s[C++][j-1]=c[t];
t++;
t%=2;
}
//half
for(int j=n/2+2;j<n;j++)
{
int C=2;
while(C<=j)
s[C++][j]=c[t];
C--;
s[C][j-2]=s[C][j-1]=s[C][j];
while(C<n)
s[C++][j-2]=c[t];
t++;
t%=2;
}
//pri
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
printf("%c",s[i][j]);
printf("\n");
}
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int n;
scanf("%d",&n);
if(n==1)
{
printf("Y\n");
continue;
}
if(n<=4)
printf("No solution!\n");
else
solve(n);
}
return 0;
}