#include <stdio.h> #include <stdlib.h> int cmp(const void *a, const void *b) { return *(int *)a - *(int *)b; } void intersection_set(int *a, int size_a, int *b, int size_b) { int i = 0, j = 0; while (i < size_a && j < size_b) { if (a[i] == b[j]) { printf("%d ", a[i]); ++i; ++j; } else if (a[i] < b[j]) ++i; else ++j; } printf("\n"); } void union_set(int *a, int size_a, int *b, int size_b) { int i = 0, j = 0; while (i < size_a && j < size_b) { if (a[i] == b[j]) { printf("%d ", a[i]); ++i; ++j; } else if (a[i] < b[j]) { printf("%d ", a[i]); ++i; } else { printf("%d ", b[j]); ++j; } } while (i < size_a) { printf("%d ", a[i]); ++i; } while (j < size_b) { printf("%d ", b[j]); ++j; } printf("\n"); } void difference_set(int *a, int size_a, int *b, int size_b) { int i = 0, j = 0; while (i < size_a && j < size_b) { if (a[i] == b[j]) { ++i; ++j; } else if (a[i] < b[j]) { printf("%d ", a[i]); ++i; } else ++j; } while (i < size_a) { printf("%d ", a[i]); ++i; } } int main() { int n, m; int a[1002] = { 0 }, b[1002] = { 0 }; scanf("%d", &n); for (int i = 0; i < n; ++i) scanf("%d", &a[i]); scanf("%d", &m); for (int i = 0; i < m; ++i) scanf("%d", &b[i]); qsort(a, n, sizeof(int), cmp); qsort(b, m, sizeof(int), cmp); intersection_set(a, n, b, m); union_set(a, n, b, m); difference_set(a, n, b, m); return 0; } /************************************************************** Problem: 1852 User: admin Language: C++ Result: Accepted Time:76 ms Memory:1144 kb ****************************************************************/