JZOJ 2307. 【中山市选2011】新年礼物
题目
分析
- 原来我想的是优先队列,一直去前m最大值,但不知道为啥一直0
- 没有办法了,二分枚举答案判断合法性
代码
1 #include<iostream> 2 #include<algorithm> 3 using namespace std; 4 long long f[10001]; 5 long long a[10001]; 6 long long n,m; 7 bool check(long long now) 8 { 9 long long sum=0; 10 for (int i=1;i<=n-m;i++) 11 sum+=a[i]; 12 for (int i=n-m+1;i<=n;i++) 13 { 14 if (a[i]<now) 15 { 16 sum-=now-a[i]; 17 if (sum<0) return false; 18 } 19 } 20 return true; 21 } 22 int main () 23 { 24 cin>>n; 25 while (n!=0) 26 { 27 long long ans=0; 28 for (int i=1,x;i<=n;i++) 29 { 30 cin>>a[i]; 31 ans+=a[i]; 32 } 33 cin>>m; 34 sort(a+1,a+1+n); 35 long long l=1,r=ans/m; 36 while (l<=r) 37 { 38 long long mid=(l+r)/2; 39 if (check(mid)) 40 l=mid+1; 41 else 42 r=mid-1; 43 } 44 cout<<r<<" "; 45 cin>>n; 46 } 47 }
为何要逼自己长大,去闯不该闯的荒唐