您的位置:首页 > 其它

zoj 3810(找规律)

2015-03-08 17:27 246 查看
题意:有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

;

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  zoj