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