#include <stdio.h> #define LEN 2500 int n,m; long long arr[LEN][2] = {0};/*0->存储数据,1->存储加点*/ void sort_q(int x,int y,long long tmp[LEN][2]) { int i = x , j = y; long long k[2]; k[0] = tmp[x][0]; k[1] = tmp[x][1]; if (i < j) { while (i < j) { while (i < j && k[0] < tmp[j][0]) j --; if (i < j) { tmp[i][0] = tmp[j][0]; tmp[i][1] = tmp[j][1]; i ++; } while (i < j && k[0] > tmp[i][0]) i ++; if (i < j) { tmp[j][0] = tmp[i][0]; tmp[j][1] = tmp[i][1]; j --; } } tmp[i][0] = k[0]; tmp[i][1] = k[1]; sort_q(x,i-1,tmp); sort_q(i+1,y,tmp); } return ; } void init(void) { int flag; int i,j; long long k; scanf("%d",&n); for (i = 1 ; i <= n ; i ++) { scanf("%lld",&k); arr[i][0] = k; arr[i][1] += 1; } scanf("%d",&m); for (i = n+1 ; i <= n+m ; i ++) { scanf("%lld",&k); flag = 1; for (j = 1 ; j <= n ; j ++) { if (arr[j][0] == k) { arr[j][1] += 2; flag = 0; break; } } if (flag) { arr[i][0] = k; arr[i][1] += 2; } } sort_q(1,i,arr); /*快排*/ return ; } void print() { int i; for (i = 1 ; i <= LEN ; i ++) { if (arr[i][1] >= 3) { printf("%lld ",arr[i][0]);/*输出AB交集*/ } } printf("\n"); for (i = 1 ; i <= LEN ; i ++) { if (arr[i][1] != 0) { printf("%lld ",arr[i][0]);/*输出AB并集*/ } } printf("\n"); for (i = 1 ; i <= LEN ; i ++) { if (arr[i][1] == 1) { printf("%lld ",arr[i][0]);/*输出B在A中的余集*/ } } return ; } int main(void) { init(); print(); return 0; } /************************************************************** Problem: 1852 User: admin Language: C Result: Accepted Time:79 ms Memory:1184 kb ****************************************************************/