若能凑出 , 则 内的数字全部为 美妙的数字,
则 美妙的数字 出现范围为 , 题目转化 为: 求 中有多少数字不是 美妙的数字 .
这里有个神奇的方法,
将 从小到大 排序, 记 前缀和 为 ,
则区间 中的数字必定不是 美妙的数字 .
简单理解为: 小的凑不出来, 大的直接越界 .
于是统计出 绝对不是 美妙的数字 的数量, 用 减去即是答案 .
#include<bits/stdc++.h>
#define reg register
typedef long long ll;
int read(){
char c;
int s = 0, flag = 1;
while((c=getchar()) && !isdigit(c))
if(c == '-'){ flag = -1, c = getchar(); break ; }
while(isdigit(c)) s = s*10 + c-'0', c = getchar();
return s * flag;
}
const int maxn = 1e5 + 10;
int N;
int A[maxn];
ll sum;
ll sum_2;
int main(){
N = read();
for(reg int i = 1; i <= N; i ++) A[i] = read();
std::sort(A+1, A+N+1);
for(reg int i = 1; i <= N; i ++){
sum_2 += std::max(0ll, (A[i]-1)/2 - sum);
sum += A[i];
}
printf("%lld
", sum - sum_2);
return 0;
}