#include #include int main(int argc, char *argv[]) { #define SHEET_WIDTH 1000 #define SHEET_HEIGHT 1000 #define ID_LIMIT 2000 #define LINEWIDTH 80 static int sheet[SHEET_HEIGHT][SHEET_WIDTH]; static int winner[ID_LIMIT]; static char format[] = "#%d @ %d,%d: %dx%d\n"; static char buffer[LINEWIDTH]; int id, left, top, width, height, i, j, *tile, overlap; memset(sheet, 0, sizeof sheet); memset(winner, 0, sizeof winner); FILE *input = fopen("input.txt", "r"); while (fgets(buffer, LINEWIDTH, input)) { int len = strlen(buffer); if (buffer[len - 1] == '\n') { if ( sscanf(buffer, format, &id, &left, &top, &width, &height) == 5 && id > 0 && id < ID_LIMIT && top >= 0 && top + height <= SHEET_HEIGHT && left >= 0 && left + width <= SHEET_WIDTH ) { overlap = 0; for (j = 0; j < height; ++j) { for (i = 0; i < width; ++i) { tile = &sheet[top + j][left + i]; winner[*tile] = 0; if (*tile) overlap = 1; *tile = id; } } winner[id] = !overlap; } } else { while (!feof(input) && fgetc(input) != '\n') ; } } for (id = 1; id < ID_LIMIT; ++id) { if (winner[id]) printf("%d\n", id); } return 0; }