【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;
}
posted @ 2020-08-23 15:44  Jayun  阅读(81)  评论(0编辑  收藏  举报