제출 #1324504

#제출 시각아이디문제언어결과실행 시간메모리
1324504jack205Mobile (BOI12_mobile)C++20
36 / 100
1098 ms47744 KiB
#include<iostream>
#include<vector>
#include<algorithm>
#include<cmath>
#include<stack>
#include<iomanip>
using namespace std;
const long long MAX = 1E6;
long long n, l;
pair<double, double> a[MAX + 5];
pair<double, double> seg[MAX + 5];
const double eps = 1e-12;
signed main()
{
	cin >> n >> l;
	for (long long i = 1; i <= n; i++) cin >> a[i].first >> a[i].second;
	double st = 0;
	double ed = 1e12 + 5;
	double ans = -1;
	while(ed - st >= 1e-6)
	{
		vector<long long> sta;
		double mid = (st + ed) / 2;
		for (long long i = 1; i <= n; i++)
		{
			double x = a[i].first;
			double y = a[i].second;
			if (mid * mid < y * y)
			{
				seg[i] = { 1e18,1e18 };
				continue;
			}
			seg[i].first = x - sqrt(mid * mid - y * y);
			seg[i].second= x + sqrt(mid * mid - y * y);
		}
		for (long long i = 1; i <= n; i++)
		{
			if (seg[i].first == 1e18) continue;
			while (sta.size() and seg[sta.back()].first >= seg[i].first - eps) sta.pop_back();
			sta.push_back(i);
		}
		reverse(sta.begin(), sta.end());
		double cur = 0;
		while (sta.size())
		{
			long long now = sta.back();
			sta.pop_back();
			if (seg[now].first > cur + eps)
			{
				cur = -1;
				break;
			}
			cur = max(cur, seg[now].second);
		}
		if (cur >= l)
		{
			ans = mid;
			ed = mid;
		}
		else st = mid;
	}
	cout << fixed << setprecision(6) << (double)ans << "\n"; 
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...