2b.c (1052B)
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <stdbool.h> 4 #include <string.h> 5 6 typedef struct range { 7 long long int upper, lower; 8 } range; 9 10 bool 11 readrange(FILE *in, range *r) { 12 fscanf(in, "%lld-%lld", &r->lower, &r->upper); 13 return (getc(in) == ',') ? 1 : 0; 14 } 15 16 bool 17 isrepeat(char *s1, char *s2, int i) { 18 do { 19 s1 += i; 20 if (s1[0] == 0) break; 21 if (memcmp(s1, s2, i) != 0) return false; 22 } while (s1[0] != 0); 23 return true; 24 } 25 26 bool 27 isvalid(long long int i) { 28 char str[20] = {0}, str2[20] = {0}; 29 int mid = 0; 30 31 snprintf(str, 20, "%lld", i); 32 33 for (int i = 1; i < (strlen(str) / 2) + 1; i++) { 34 memset(str2, 0, 20); 35 memcpy(str2, str, i); 36 if (isrepeat(str, str2, i)) return false; 37 } 38 39 return true; 40 } 41 42 long long int 43 checkrange(range r) { 44 long long int total = 0; 45 for (long long int i = r.lower; i <= r.upper; i++) { 46 if (!isvalid(i)) total += i; 47 } 48 return total; 49 } 50 51 int 52 main() { 53 range r; 54 long long int total = 0; 55 56 while (readrange(stdin, &r)) 57 total += checkrange(r); 58 total += checkrange(r); 59 60 printf("%lld\n", total); 61 return 0; 62 }