Submission #1139056

#TimeUsernameProblemLanguageResultExecution timeMemory
1139056monostackMobile (BOI12_mobile)C++20
100 / 100
363 ms33196 KiB
#include<bits/stdc++.h> #include <cstdio> using namespace std; #define int long long #define ld long double #define ff first #define ss second #define INF -1e18 #define mp make_pair struct point{ ld x,y; friend istream& operator>>(istream& in, point& p){ in>>p.x>>p.y; return in; } }; int n,k; ld d(point a, point b){ return sqrt((a.x - b.x)*(a.x - b.x) + (a.y - b.y)*(a.y - b.y)); } ld f(point a, point b){ ld res = ((b.y)*(b.y) +(b.x)*(b.x)- (a.y)*(a.y) - (a.x)*(a.x))/(2*(b.x - a.x)); return res; } int32_t main(){ ios_base::sync_with_stdio(0); cin.tie(nullptr); cin>>n>>k; ld ans = 0; deque<point> needed; for(int i = 0; i < n; i++){ point cur; cin>>cur; cur.y = abs(cur.y); if((int)needed.size() && needed.back().x == cur.x){ if(cur.y >= needed.back().y) continue; else if(cur.y < needed.back().y) needed.pop_back(); } while((int)needed.size() > 1 && f(needed[(int)needed.size() - 2], needed.back()) > f(needed.back(), cur)){ needed.pop_back(); } needed.push_back(cur); } while((int)needed.size() > 1 && f(needed[0],needed[1]) < 0) needed.pop_front(); while((int)needed.size() > 1 && f(needed[(int)needed.size()-2],needed.back())>k) needed.pop_back(); for(int i = 0; i < (int)needed.size(); i++){ point left = {0,0}, right = {(ld)k,0}; if(i) left.x = f(needed[i], needed[i-1]); if(i < needed.size() - 1) right.x = f(needed[i],needed[i+1]); if(left.x < 0 || left.x > k || right.x < 0 || right.x > k) continue; ans = max({ans, d(needed[i],left), d(needed[i],right)}); } cout<<fixed<<setprecision(6)<<ans; }
#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...