#include #include int main(int argc, char *argv[]) { #define SHEET_WIDTH 1000 #define SHEET_HEIGHT 1000 #define LINEWIDTH 80 static char sheet[SHEET_HEIGHT][SHEET_WIDTH]; static char format[] = "#%d @ %d,%d: %dx%d\n"; static char buffer[LINEWIDTH]; int id, left, top, width, height, i, j, overlaps; memset(sheet, '\xff', sizeof sheet); 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 && top >= 0 && top + height <= SHEET_HEIGHT && left >= 0 && left + width <= SHEET_WIDTH ) { for (j = 0; j < height; ++j) { for (i = 0; i < width; ++i) { sheet[top + j][left + i] <<= 1; } } } } else { while (!feof(input) && fgetc(input) != '\n') ; } } overlaps = 0; for (j = 0; j < SHEET_HEIGHT; ++j) { for (i = 0; i < SHEET_WIDTH; ++i) { overlaps += ((sheet[i][j] & 2) == 0); } } printf("%d\n", overlaps); return 0; }