제출 #1324512

#제출 시각아이디문제언어결과실행 시간메모리
1324512jack205Mobile (BOI12_mobile)C++20
51 / 100
715 ms39476 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-9;
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;
			double r2 = mid * mid;
			double yy = y * y;
			if (mid * mid + eps < y * y)
			{
				continue;
			}
			double dx = sqrt(max(0.0, r2 - yy));
			seg[i].first = x - dx;
			seg[i].second = x + dx;
			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...