제출 #1324491

#제출 시각아이디문제언어결과실행 시간메모리
1324491jack205Mobile (BOI12_mobile)C++20
31 / 100
1096 ms40132 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];
stack<long long> sta;
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-8)
	{
		while (sta.size()) sta.pop();
		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.top()].first >= seg[i].first) sta.pop();
			sta.push(i);
		}
		stack<int> temp;
		while (sta.size())
		{
			temp.push(sta.top());
			sta.pop();
		}
		double cur = 0;
		while (temp.size())
		{
			long long now = temp.top();
			temp.pop();
			if (seg[now].first > cur)
			{
				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...