RT,样例过了,bdfs无果
#include<bits/stdc++.h>
#define rep(i,j,n) for(int i=j;i<=int(n);++i)
#define rep1(i,j,n) for(int i=j;i>=int(n);--i)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
int n,m;
double t;
double ans;
double ans1;
double a[10001];
bool find(double k){
double sum=0;
int i2=0;
rep(i,1,n*m){
i2 = i;
if(a[i] < k){
sum += (k-a[i])*100;
}
if(sum > t) break;
}
if(i2<n*m || sum>t) return false;
return true;
}
int main(){
int g;
while((scanf("%d%d",&n,&m)==2 && n!=0 && m!=0)){
g++;
rep(i,1,n*m){
scanf("%lf",&a[i]);
}
scanf("%lf",&t);
sort(a+1,a+1+n*m);
double l=0,r=10000000;
while(l <= r){
double mid = (l+r)/2.0;
if(find(mid)){
l = mid+0.000001;
ans1 = l;
}else{
r = mid-0.000001;
}
}
rep(i,1,n*m){
if(a[i] < ans1){
ans++;
}
}
printf("Region %d\n",g);
printf("Water level is %.2lf meters.\n",ans1);
printf("%.2lf percent of the region is under water.\n\n",ans/(1.0*n*m)*100);
}
return 0;
}