제출 #1324509

#제출 시각아이디문제언어결과실행 시간메모리
1324509jack205Mobile (BOI12_mobile)C++20
51 / 100
695 ms39544 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()
{
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	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;
	vector<long long> sta;
	sta.reserve(n);
	for(int it=0;it<60;it++)
	{
		sta.clear();
		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)
			{
				continue;
			}
			seg[i].first = x - sqrt(mid * mid - y * y);
			seg[i].second = x + sqrt(mid * mid - y * y);
			while (sta.size() and seg[sta.back()].first >= seg[i].first - eps) sta.pop_back();
			sta.push_back(i);
		}
		double cur = 0;
		for(int now:sta)
		{
			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...