#include #include #include #define LINE_MAX 64 #define LIST_MAX 1024 #define abs(a) (a) < 0 ? -(a) : (a); int cmp(const void*, const void*); int main() { char *p, *buf, c; int left, right, *left_list, *right_list, i = 0; buf = calloc(LINE_MAX, sizeof(char)); p = buf; left_list = calloc(LIST_MAX, sizeof(*left_list)); right_list = calloc(LIST_MAX, sizeof(*right_list)); while ((c = getchar()) != EOF) { *p++ = c; if (c == '\n') { *p = '\0'; sscanf(buf, "%i %i", &left, &right); left_list[i] = left; right_list[i] = right; i++; memset(buf, 0, LINE_MAX); p = buf; } } free(buf); qsort(left_list, i, sizeof(*left_list), cmp); qsort(right_list, i, sizeof(*right_list), cmp); int sum = 0; for (int j = 0; j < i; j++) { sum += abs(left_list[j] - right_list[j]); } int similarity = 0; for (int j = 0; j < i; j++) { int count = 0; for (int k = 0; k < i; k++) { if (left_list[j] == right_list[k]) { count++; } } similarity += left_list[j] * count; } free(left_list); free(right_list); printf("%i\n", sum); printf("%i\n", similarity); } int cmp(const void* a, const void* b) { return *(int*)a - *(int*)b; }