AcWing 5048. 无线网络(浮点数二分+贪心)

1:思路:浮点数二分+贪心

(check地方其实还可以再用二分优化)

2:小坑

因为精度问题需要在二分结束再进行一次check:

3:ACcode:

#include
using namespace std;
//#define int long long
const int N=2e5+10;
int n,x[N];
vectorans;
bool check(double r){
	ans.clear();
	ans.push_back(x[0]+r);
	for(int i=1;ians.back()+r){
			if(ans.size()==3)return false;
			ans.push_back(x[i]+r);
		}
	}
	return true;
}
void solve() {
   scanf("%d",&n);
   for(int i=0;i1e-7){//浮点数二分 
   	double mid=(l+r)/2;
   	if(check(mid))r=mid;
   	else l=mid;
   } 
   check(r);
   printf("%.7lf\n",r);
   while(ans.size()<3)ans.push_back(0);
   for(auto s:ans){
   	printf("%.7lf ",s);
   }
}
signed main() {

//	ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
	int tt=1;
//	cin>>tt;
	while(tt--) solve();
	return 0;
}
//3


over~

你可能感兴趣的:(贪心,浮点数二分)