//70ms 在输出格式卡了挺久
#include <cstdio> #include <cmath> #include <cstring> const int maxn = 70; char gra[maxn][maxn]; int count, arr[1 << 13]; int n; int allthesame(int r, int c, int w)//返回1全黑,-1全白,0既有黑也有白 { char col = gra[r][c]; for (int ir = r;ir < r + w;ir++) for (int ic = c;ic < c + w;ic++) if (gra[ir][ic] != col)return 0;//灰色 if (col == '0')return -1;//白色 return 1;//黑色 } void dfs(int r, int c, int w, int road) { int ret_value = allthesame(r, c, w); if (ret_value == 1) { arr[count++] = road; return; } if (ret_value == -1)return; int depth = 0, t = road; while (t) { t /= 5;depth++; } t = (int)pow(5, depth); dfs(r, c, w / 2, road + t); dfs(r, c + w / 2, w / 2, road + t * 2); dfs(r + w / 2, c, w / 2, road + t * 3); dfs(r + w / 2, c + w / 2, w / 2, road + t * 4); } bool read() { count = 0; scanf("%d", &n); if (!n)return false; if (n > 0) { for (int i = 0;i < n;i++) scanf("%s", gra[i]); } else { int t; while (scanf("%d", &t) == 1 && t != -1) arr[count++] = t; } return true; } void bubblesort(int arr[], int count) { for (int i = 0;i < count - 1;i++) { for (int j = 0;j < count-1;j++) { if (arr[j] > arr[j + 1]) { int t = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = t; } } } } void print() { if (n > 0) { bubblesort(arr, count); //if(count)printf("%d", arr[0]); for (int i = 0;i < count;i++) { printf("%d", arr[i]); if ((i + 1) % 12 == 0||i==count-1)printf(" ");//这波输出格式很给力 else printf(" "); } //if(count)printf(" "); printf("Total number of black nodes = %d ", count); } else { for (int i = 0;i < -n;i++) { printf("%s ", gra[i]); /*for (int j = 0;j<-n;j++) printf("%c", gra[i][j]); printf(" ");*/ } } } const int dr[] = { 0,0,1,1 }; const int dc[] = { 0,1,0,1 }; void draw(int u) { int r = 0, c = 0, w = -n; while (u) { w /= 2; r += dr[u % 5 - 1] * w; c += dc[u % 5 - 1] * w; u /= 5; } for (int i = r;i < r + w;i++) for (int j = c;j < c + w;j++) gra[i][j] = '*'; } void Draw() { memset(gra, '.', sizeof(gra)); for (int i = 0;i < -n;i++) gra[i][-n] = '