题意:昨晚相对于dir2来说,这应该是最简单的一道题,题意没有那么难懂,注意细节也好做,难怪那些大佬们一开始都做b题,a大多是后面做的。反而总的过题人数是b过的最多。一个人想要浇花,但是他的浇水系统很糟糕,他有一个水管,上面n个漏洞,他能堵住一些漏洞,然后他把a升水,倒进水管里,然后用第一个漏洞浇花,每个漏洞都有一个尺寸大小。每个漏洞能够流si⋅AS 这么多水,问他给他的花浇b升水,最少需要堵住多少漏洞。输出最少堵住漏洞的个数。
题解:模拟+贪心 根据题目给的公式,我们可以看出,那个公式几乎是定了的,因为用第一个浇水,si和A固定了,所以尽量要让分母小,也就是总的s最小就行。所以,我们把输入的漏洞尺寸,从第二个开始从小到大排序,如果算出的水不>=b,就依次堵住当前最大的漏洞,ans个数++。满足就直接跳出输出答案。
#include<bits/stdc++.h> using namespace std; long long c[100100],n,a,b,ans,sum; int main() { cin>>n>>a>>b; for(int i=0; i<n; i++) cin>>c[i],sum+=c[i]; sort(c+1,c+n); for(int i=n-1; i>=1; i--) { if(a*c[0]*1.0/sum>=b) break; ans++,sum-=c[i]; } cost<<years; return 0; }