题目描述:
这是一个独一无二的世界,所以有 N 张写有互不相同的自然数的卡片,第 i 张卡片写着 Ai,现在你得到了一个未命名的空白卡片,想在上面写上一个自然数 x 满足以下条件: 1.x 不等于任意一张卡片上的数字。 2.x 可以表示为两张互不相同卡片的数字之和。 现在,你想知道有哪些自然数 x 可以写在空白卡片上。
输入
第一行一个正整数 N,表示已写有自然数的卡片数量。 第二行有 N 个用空格隔开的互不相同的自然数,表示卡片上的自然数。
输出
第一行一个正整数 M,表示可以写在空白卡片上的数字的个数。 第二行有 M 个用空格隔开的自然数,表示可以写在空白卡片上的数字,需要从小到大输出。
样例输入:
4 4 9 3 5
样例输出:
5 7 8 12 13 14
数据范围:3 ≤ N ≤ 2000,0 ≤ Ai ≤ 100000。
我的代码:
#include<bits/stdc++.h>
using namespace std;
long long n, a[100001], minn = 0, maxn = 0, cnt = 0, b[100001], c[100001], x = 0, f = 0, l = 0;
int main()
{
cin >> n;
for(int i = 0; i < n; i++)
{
cin >> a[i];
}
sort(a, a + n);
minn = a[0], maxn = a[n - 1];
for(int i = minn * 2 + 1; i <= maxn * 2 - 1; i++)
{
b[l++] = i;
}
for(int i = 0; i < n; i++)
{
for(int j = i + 1; j < n; j++)
{
c[x++] = a[i] + a[j];
}
}
for(int i = 0; i < l; i++)
{
f = 0;
for(int j = 0; j < x; j++)
{
if(b[i] == c[j])
{
f = 1;
break;
}
}
if(!f)
{
b[i] = 0;
}
}
for(int i = 0; i < l; i++)
{
f = 0;
for(int j = 0; j < n; j++)
{
if(b[i] == a[j])
{
f = 1;
b[i] = 0;
break;
}
}
if(!f)
{
if(b[i])
{
cnt++;
}
}
}
cout << cnt << endl;
for(int i = 0; i < l; i++)
{
if(b[i])
cout << b[i] << " ";
}
}
40分,运行时错误
错误的点n约等于10000
蒟蒻求助
悬关