5b.c (878B)
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 5 typedef struct range { 6 long long int lower, upper; 7 } range; 8 9 range ranges[1024]; 10 int rangecount = 0; 11 12 void 13 loadranges(FILE *f) { 14 char line[64] = {0}; 15 while (fgets(line, 64, f) && line[0] != '\n') { 16 ranges[rangecount].lower = atoll(line); 17 ranges[rangecount].upper = atoll(strchr(line, '-') + 1); 18 rangecount++; 19 } 20 } 21 22 int 23 hasappeared(long long int id, range *end) { 24 range *r; 25 for (r = ranges; r != end; r = &r[1]) { 26 if (id <= r->upper && id >= r->lower) 27 goto seen; 28 } 29 return 0; 30 seen: 31 return 1; 32 } 33 34 int 35 main() { 36 long long int total = 0, start; 37 int i; 38 loadranges(stdin); 39 40 for (i = 0; i < rangecount; i++) { 41 for (start = ranges[i].lower; start <= ranges[i].upper; start++) { 42 if (!hasappeared(start, &ranges[i])) { 43 total++; 44 //printf("new valid id\n"); 45 } 46 } 47 } 48 printf("%lld\n", total); 49 }