真是脑残。。。擦
具体题解在这里 http://www.cnblogs.com/windysai/p/3619222.html
原本我为了防止两个数冲突,设置了好多判断,结果发现,如果两个数冲突,另外找两个 i,s+1-i输出就行了,因为两个数冲突 和必定为s+1,反正最后只是要求总和相同,找两个没有访问过得数输出不就行啦。。。我真是太脑残了,看别人的代码多简单,自己写了这么多不是WA就是TLE、、、哎。。思维怎么总转不过弯呢
#include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> using namespace std; const int maxn = 1e6; int x[maxn]; int main() { int n, i, j, t; while (scanf("%d", &n) != EOF) { memset(x, 0, sizeof(x)); for (i = 0; i < n; i++) { scanf("%d", &t); x[t] = 1; } printf("%d ", n); int cnt = 0; for (i = 1; i <= maxn; i++) { if (x[i] && !x[maxn-i+1]) { printf("%d ", maxn-i+1); cnt++; } } for (i = 1; i <= maxn && cnt != n; i++) { if (!x[i] && !x[maxn-i+1]) { printf("%d %d ", i, maxn-i+1); cnt += 2; } } printf(" "); } return 0; }