题目描述
出题人心情很失落,于是他直接告诉你让你求出一个集合中所有数所不能凑出来的最小的数是多少.
输入
第一行一个整数n.
第二行n个整数ai.
输出
一个整数表示答案.
输入样例
3
5 1 2
输出样例
4
说明
对于 30% 的数据,满⾜ n ≤ 15。
对于 60% 的数据,满⾜ n ≤ 1000。
对于 100% 的数据,满⾜ n ≤ 100000, 1 ≤ ai ≤ 10^9
.
.
.
.
.
.
.
分析
设sum为前i项之和
定义1~sum的数必能凑出来
那么不能凑出来的数则可能为sum+1~a[i+1]
如果a[i+1]<sum+1则继续枚举下一项
这一过程在数轴上更好体现
.
.
.
.
.
.
程序:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n;
long long a[100010];
int main()
{
scanf("%d",&n);
for (int i=1;i<=n;i++)
scanf("%lld",&a[i]);
sort(a+1,a+n+1);
long long sum=0;
for (int i=1;i<=n-1;i++)
{
sum+=a[i];
if (sum+1<a[i+1])
{
cout<<sum+1;
return 0;
}
}
cout<<sum+a[n]+1;
return 0;
}