/* (ICPC 2001 domestic) problem E */ #include #include #define false 0 #define true (!false) typedef int bool; #define FIELDMAX 5 typedef struct { int body[FIELDMAX][FIELDMAX]; } field; #define iter(i) for(i=0; ibody[i][j] = 0; } void read_field(field *f) { /* scanf... */ int i; iter(i) scanf("%d %d %d %d %d\n", &(f->body[i][0]), &(f->body[i][1]), &(f->body[i][2]), &(f->body[i][3]), &(f->body[i][4])); } bool check_1(field *f) { int i, j; int a[6]; for(i=0; i<6; i++) a[i]=0; iter(i) iter(j) { int v = f->body[i][j]; if(v) a[v-1]++; } for(i=0; i<6; i++) if(a[i]!=1) return false; return true; } # define NBODY(X, Y) f->body[X][Y] # define TBODY(X, Y) f->body[Y][X] #define make_search_func(BODY, D) \ int search_## D (field *f, int x, int y, int y1, int y2) \ { \ /* \ * [B] y2 \ * [.][.][.][.] y1 \ * [A] \ * [B] \ * [.][.][.] \ * [A] \ * . \ * . \ * . \ * [B] \ * [.][.][.][.] \ * [A] \ */ \ \ int i, min_x, max_x; \ \ if (y2 < 0 || FIELDMAX <= y2) \ return 0; \ \ if (BODY(x,y1) == 0) \ return 0; \ \ for (min_x = x-1; min_x >= 0; min_x--) \ if (BODY(min_x,y1)==0) \ break; \ min_x++; \ \ for (max_x=x+1; max_x < FIELDMAX; max_x++) \ if (BODY(max_x,y1)==0) \ break; \ max_x--; \ \ for (i = min_x; i <= max_x; i++) \ if (BODY(i,y2)) \ return BODY(i,y2); \ \ return 0; \ } \ make_search_func(NBODY, y) make_search_func(TBODY, x) #define CHECK_SUM if (7 == v + v2) continue; else return false; bool check_7(field *f) { int i, j, v; iter(i) iter(j) if((v = NBODY(i, j))) { int v2; if ((v2 = search_y(f, i, j, j-1, j-2))) CHECK_SUM if ((v2 = search_y(f, i, j, j+1, j+2))) CHECK_SUM if ((v2 = search_x(f, j, i, i-1, i-2))) CHECK_SUM if ((v2 = search_x(f, j, i, i+1, i+2))) CHECK_SUM return false; } return true; } void dump_field(field *f) { int i, j; iter(i) { iter(j) printf("%d ", NBODY(i, j)); printf("\n"); } } int main(void) { int i, n; field *f; scanf("%d\n", &n); f = malloc(sizeof(field) * n); for (i = 0; i < n; i++) { clear_field(f+i); read_field(f+i); } for (i = 0; i < n; i++) { printf("%s\n", check_1(f+i) && check_7(f+i) ? "true" : "false"); } /* for (i = 0; i < n; i++) { dump_field(f+i); } */ return 0; }