题意就是输入n,A,B,然后有n个数,然后求pre[0] * A / sum的值是否大于等于B,如果小于B的话,需要在pre数组里减去一个数,直到所求的值大于等于B,问最少需要减掉多少个数。思路就是让pre数组里的第一个数不动,然后对后面的数sort一下,因为减掉的数越小,所求的值越大。然后sum一直更新和就好了。
AC代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int n,a,b;
int pre[100005];
int sum = 0;
int main()
{
cin>>n>>a>>b;
for(int i=0;i<n;i++){
cin>>pre[i];
sum += pre[i];
}
sort(pre+1,pre+n);
int num = 0;
int flag = 0;
for(int i=n-1;i>=1;i--){
if(a * pre[0]/sum >= b){
cout<<num<<endl;
flag = 1;
break;
}
num++;
sum -= pre[i];
}
if(flag==0)cout<<num<<endl;
return 0;
}