题意:有green red yellow blue四种颜色,把一个N*N的矩阵划分为N个区域,颜色相同且紧邻认为是同一个区域,构造一个N*N的矩阵,用GRYB表示。
题解:构造矩形,找到构造规律就好了。。。可是好难QAQ。1和6特殊处理,2、3、4无解,剩下的用规律构造之。
#include <stdio.h>
#include <string.h>
const int N = 105;
char s[5] = "BGRY";
int g[N][N];
void solve(int n) {
memset(g, 0, sizeof(g));
for (int i = 0; i < n; i++)
g[0][i] = 3;
int k = (n - 1) / 2, col = 1;
for (int i = 0; i < k; i++) {
for (int j = 1; j <= i + 1; j++)
g[j][i + 1] = col;
for (int j = i + 1; j < n; j++)
g[j][i] = col;
col = 3 - col;
}
for (int i = k; i < n; i++) {
for (int j = 2; j <= i + 2; j++)
g[j][i + 2] = col;
g[i + 2][i + 1] = col;
for (int j = i + 2; j < n; j++)
g[j][i] = col;
col = 3 - col;
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++)
printf("%c", s[g[i][j]]);
printf("\n");
}
}
int main() {
int t, n;
scanf("%d", &t);
while (t--) {
scanf("%d", &n);
if (n == 1)
printf("B\n");
else if (n == 6)
printf("YYYYYY\nGGRGRR\nGRRGRB\nGRGGRB\nGRGRRB\nGRGBBB\n");
else if (n >= 5)
solve(n);
else
printf("No solution!\n");
}
return 0;
}