L i n k Link Link
l u o g u T 145185 luogu\ T145185 luogu T145185
D e s c r i p t i o n Description Description
出题人心情很失落,于是他直接告诉你让你求出一个集合中所有数所不能凑出来的最小的数是多少.
I n p u t Input Input
第一行一个整数 n n n。
第二行 n n n 个整数 a i a_i ai
O u t p u t Output Output
一个整数表示答案。
S a m p l e Sample Sample I n p u t Input Input
3
5 1 2
S a m p l e Sample Sample O u t p u t Output Output
4
H i n t Hint Hint
S o l u t i o n Solution Solution
垃圾数学
直接见代码吧,害
C o d e Code Code
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#define ll long long
using namespace std;
int n; ll now;
ll a[10000005], sum[10000005];
int main()
{
scanf("%d", &n);
for (int i = 1; i <= n; ++i) {
scanf("%lld", &a[i]);
sum[i] = sum[i - 1] + a[i];//前缀和
}
sort(a + 1, a + n + 1);//从小排个序
for (int i = 1; i <= n; ++i)
{
if (now + 1 < a[i]) {//判断有没有接不上的数字
printf("%lld", now + 1);
return 0;
}
now += a[i];
}
printf("%lld", sum[n] + 1);//若没有很显然就是和 + 1
return 0;
}