#include #include #include typedef struct { int complete; char name[26]; int xl, yl, xh, yh; } country_t; country_t countries[21]; typedef struct { int country; int coins[21]; } city_t; int c; city_t cities[2][12][12]; int countrycmp(const void *_x, const void *_y) { int result; country_t *x = (country_t *)_x, *y = (country_t *)_y; result = strcmp(x->name, y->name); if (result < 0) { return -1; } if (result > 0) { return +1; } return 0; } int main() { int i, j, k, l, xl, xh, yl, yh, d, day, allcomplete, i_case; int dx[4] = {0, 1, 0, -1}; int dy[4] = {1, 0, -1, 0}; for (i_case = 1; ; i_case++) { scanf("%d", &c); if (c == 0) { break; } for (i = 0; i < 12; i++) { for (j = 0; j < 12; j++) { cities[0][i][j].country = -1; for (k = 0; k < c; k++) { cities[0][i][j].coins[k] = 0; } } } for (i = 0; i < c; i++) { scanf("%s %d %d %d %d", countries[i].name, &countries[i].xl, &countries[i].yl, &countries[i].xh, &countries[i].yh); } qsort(countries, c, sizeof(country_t), countrycmp); for (i = 0; i < c; i++) { for (j = countries[i].xl; j <= countries[i].xh; j++) { for (k = countries[i].yl; k <= countries[i].yh; k++) { cities[0][j][k].country = i; cities[0][j][k].coins[i] = 1000000; } } countries[i].complete = 0; } printf("Case Number %d\n", i_case); for (day = 0; ; day++) { allcomplete = 1; for (i = 0; i < c; i++) { /* Check about country i */ if (countries[i].complete) { continue; } allcomplete = 0; countries[i].complete = 1; for (j = 1; j <= 10; j++) { for (k = 1; k <= 10; k++) { if (cities[0][j][k].country == i) { for (l = 0; l < c; l++) { if (cities[0][j][k].coins[l] <= 0) { countries[i].complete = 0; goto quit; } } } } } quit: if (countries[i].complete) { printf(" %s %d\n", countries[i].name, day); } } if (allcomplete) { break; } for (i = 1; i <= 10; i++) { for (j = 1; j <= 10; j++) { cities[1][i][j] = cities[0][i][j]; } } for (i = 1; i <= 10; i++) { for (j = 1; j <= 10; j++) { for (k = 0; k < c; k++) { for (d = 0; d < 4; d++) { if (cities[0][i][j].country >= 0 && cities[0][i+dx[d]][j+dy[d]].country >= 0) { cities[1][i+dx[d]][j+dy[d]].coins[k] += cities[0][i][j].coins[k] / 1000; cities[1][i][j].coins[k] -= cities[0][i][j].coins[k] / 1000; } } } } } for (i = 1; i <= 10; i++) { for (j = 1; j <= 10; j++) { cities[0][i][j] = cities[1][i][j]; } } } } return 0; }