【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;
}