题意就是输入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;
}