- 方針
昇順にソートして、それぞれの累積和を計算しておく。すると、i番目の生き物が他のすべての生き物と合体するためには、0<=i<=n-2について(0から始まるインデックス基準)、(i番目の累積和)*2 >= (i+1番目の生物の大きさ)を満たしている必要がある。逆に言うと、これを満たさない生物iがあった場合、それ以下の生物も同様に条件をみたすことができない。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
typedef long long ll;
int main() {
ll n;
cin >> n;
vector<ll> a(n);
for(int i=0;i<n;i++) cin >> a[i];
sort(a.begin(), a.end());
vector<ll> sum(n);
for(int i=0;i<n;i++) {
if(i==0) sum[i] = a[i];
else {
sum[i] = sum[i-1] + a[i];
}
}
int ans=n;
for(int i = n-2;i>=0;i--) {
if(sum[i] * 2 < a[i+1]) {
ans -= (i + 1);
break;
}
}
cout << ans << endl;
}