【Luogu T145185】 【2020.8.23NOIP模拟赛】失落 题目大意: 正文: 代码:

求出一个集合中所有数所不能凑出来的最小的数是多少。

正文:

神怖题,拿几个数据自己手玩一下就能发现规律:一个从小到大的序列若 (a_i>sum_{i-1}+1)(其中 (sum_{i}) 表示从一到 (i) 的数的总和),那么凑不出来的最小的数就是 (sum_{i-1}+1)

代码:

int main()
{
	scanf ("%d", &n) ;
	for (int i = 1; i <= n; i++)
		scanf ("%d", &a[i]);
	sort (a + 1, a + 1 + n);
	
	if(a[1] > 1)
	{
		puts("1");
		return 0;
	}
	sum = 1;
	for (int i = 2; i <= n; i++)
	{
		if(a[i] > sum + 1)
		{
			printf("%lld", sum + 1);
			return 0;
		}
		else sum += a[i];
	} 
	printf("%lld", sum + 1);
	return 0;
}