求助
查看原帖
求助
517212
XiongRan楼主2021/11/26 21:00

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;
}

2021/11/26 21:00
加载中...