很奇妙的思路,自己没想出来。
对于x-1 找到 对应的 s-y。x-1=s-y等价于y=s-x+1。
如果y没有被占用,y消去了对应的x;
如果y被占用,也就是说x和y都存在,那么x+y=s+1,找到一对没被占用的数即可。
#include <stdio.h>
int a[1000001];
int s = 1000000;
int n, t;
int main(){
scanf ("%d", &n);
printf("%d\n", n);
for (int i = 0; i < n; i++) {
scanf("%d", &t); a[t]=1;
}
for (int i = 1; i <= s; i++) //i 的对立数 s-i+1 存在
if (a[i] > 0 && a[s - i + 1] == 0) {
printf("%d ", s - i + 1);
n--;
}
for (int i = 1; i <= s && n > 0; i++) //剩下的是 i 和 s-i+1 都存在的数
if (a[i] == 0 && a[s - i + 1] == 0) {
printf("%d %d ", i, s - i + 1);
n -= 2;
}
return 0;
}