1 条题解
-
0Guest LV 0 MOD
-
1
先从小到大排序,如果取前i-1个数能够到达1到sum,那么加上第i个数后一定可以取得a[i]+1,a[i]+2……a[i]+sum。但是当a[i]>sum+1的时候,从sum+1到a[i]都一定取不到,这时候就退出啦。所以只有a[i]<=sum+1,将sum更新就可以保证从1到sum+a[i]都可以取到了。
作个说明(看代码)
#include<bits/stdc++.h>
const long long maxn=100001;
inline const void read(long long &a)
{
a=0;
char c=getchar();
while(c<'0'||c>'9')c=getchar();
while(c>='0'&&c<='9')
{
a=(a<<1)+(a<<3)+c-'0';
c=getchar();
}
}
inline const void write(long long a)
{
if(a>9)write(a/10);
putchar(a%10+'0');
}
long long n,a[maxn],sum=0;
int main()
{
read(n);
for(long long i=1;i<=n;i++)read(a[i]);
std::sort(a+1,a+1+n);
for(long long i=1;i<=n;i++)
{
if(a[i]<=sum+1)sum+=a[i];//sum表示能够已经能够组成1到sum。
else break;
//如果下一个数能在1到sum+1内,一定可以用这些数凑成1到sum+a[i];否则退出。
}
write(sum+1);
return 0;
}
- 1
信息
- 难度
- 9
- 分类
- (无)
- 标签
- (无)
- 递交数
- 1
- 已通过
- 1
- 通过率
- 100%
- 上传者