求助一道站外题(悬关)
  • 板块灌水区
  • 楼主Leo11
  • 当前回复19
  • 已保存回复19
  • 发布时间2023/6/24 20:51
  • 上次更新2023/11/3 12:29:14
查看原帖
求助一道站外题(悬关)
990387
Leo11楼主2023/6/24 20:51

题目描述:

这是一个独一无二的世界,所以有 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

蒟蒻求助

悬关

2023/6/24 20:51
加载中...