제출 #1136982

#제출 시각아이디문제언어결과실행 시간메모리
1136982monaxiaPlanine (COCI21_planine)C++20
30 / 110
44 ms10972 KiB
#include <bits/stdc++.h> #define pb push_back #define ppb pop_back #define fr first #define sc second #define all(v) v.begin(), v.end() #define mod (long long)(1e9 + 7) #define eps (long long)(1e-9) #define vektor vector using namespace std; using ll = long long; using ull = unsigned long long; using ld = long double; const ull Mod = 1e9 + 7; const ll LIMIT = 2e5; struct line{ ld a, b; }; struct point{ ld x, y; }; ld slope(line a, line b){ ld top = b.b - a.b, bottom = a.a - b.a; return top / bottom; } line inter(line A, line B){ ld x = A.a, y = A.b, u = B.a, v = B.b; ld a = (y - v) / (x - u); ld b = y - a * x; line l; l.a = a, l.b = b; return l; } line make_line(int x, int y){ line a; a.a = x, a.b = y; return a; } void find_left(int n, int k, vector <line>& a, vector <ld>& lim){ vector <line> points; vector <ld> slopes; points.pb(a[1]); for(int i = 2; i <= n; i ++){ while(!slopes.empty() && slopes.back() > slope(a[i], points.back())){ slopes.ppb(); points.ppb(); } if(i & 1 && i < n){ lim[i] = slope(inter(points.back(), a[i]), make_line(0, k)); } slopes.pb(slope(points.back(), a[i])); points.pb(a[i]); } } void find_right(int n, int k, vector <line>& a, vector <ld>& lim){ vector <line> points; vector <ld> slopes; points.pb(a[n]); for(int i = n - 1; i > 1; i --){ while(!slopes.empty() && slopes.back() < slope(a[i], points.back())){ slopes.ppb(); points.ppb(); } if(i & 1 && i < n){ lim[i] = slope(inter(points.back(), a[i]), make_line(0, k)); } slopes.pb(slope(points.back(), a[i])); points.pb(a[i]); } } void solve(){ int n, k; cin >> n >> k; vector <line> a(n + 1); for(int i = 1; i <= n; i ++){ cin >> a[i].a >> a[i].b; } vector <ld> left(n + 1), right(n + 1); find_left(n, k, a, left); find_right(n, k, a, right); vector <ld> cpr; for(int i = 3; i < n; i += 2){ cpr.pb(left[i]); cpr.pb(right[i]); } sort(all(cpr)); cpr.resize(unique(all(cpr)) - cpr.begin()); for(int i = 3; i < n; i += 2){ left[i] = lower_bound(all(cpr), left[i]) - cpr.begin() + 1; right[i] = lower_bound(all(cpr), right[i]) - cpr.begin() + 1; // cout << left[i] << " " << right[i] << "\n"; } vector <pair <int, int>> seg; for(int i = 1; i <= n; i ++) { seg.pb(make_pair(left[i], right[i])); } sort(all(seg), [](pair <int, int>& a, pair <int, int>& b){ if(a.sc != b.sc) return a.sc < b.sc; return a.fr < b.fr; }); int r = 0, ans = 0; for(auto x : seg){ if(r < x.fr){ r = x.sc; ans ++; } } cout << ans; } signed main() { cin.tie(0)->sync_with_stdio(0); // if(fopen("nameholder.inp", "r")){ // freopen("nameholder.inp", "r", stdin); // freopen("nameholder.out", "w", stdout); // } // cout << 1; return 0; ll n = 1; // cin >> n; while(n) { solve(); n --; cout << "\n"; } // cerr << "Time elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n"; return 0; } // ++++ // ++++-::......:--:::-=+++ // ++++=:............---.....--:..:=++++++ // +++++++::......................::=+++++ // @@ ++++++++++:+++++++++ // @% @* // %%@@ *****#*@@ // %%%%% @##**##***% // @@@@@@+-*#*@ #####%+*##*@ // %#+@%%@@@ ##-%:::-#*###@@ // =====:*::: ###-:==::=#*%* // -====:::::+@@%@@%@#*--=*#%%#@%@ @%@ // @=====%=-@%=:::.:+-::::+::::::::::::%-----%% @@@@@ // @@%#*@++%===+::-================@%@@@@+++++++@@@%%%@#%###% // @#***#@@ @##=%@===+--:+==+===+%*##@%%%@@@@@@@@@@:= @%@%%%@#%% // -@ @*#@ #####%:::-====+:::==---**%#@ *%%%%@@@@@@-: // -=-*% # #***--%%::::::::+=-+#-----=**@*# #+**#@# // ----=----#+****=----=*#@=::::::=#-----------***%*% // ------------%*****##=@==::::::+%-----------***%** // +-----------------*@++%::::::::-----------****@*# // =------------% @%=+%#+:::::::* #-----*--**** ** // ----%--% *==+++++=+=##*:% ---=--**** ** // %@@@@@@@@@==@+%%%%@ ----**** *# // @=*+%@@@%@@=++=:%:::% #***@@# // #+++++++++#==++-:::::: @**** *# // =+++++++++++==+++::::::: ####@ #% // +++++++++++=@ @++++::::::@ @# // @+++++++++=@ =*++=:::::@ // ++++++++@ @++++::::: // ++++++= =++++::: // =+++++@ =+++:::: // ++++++-@ =+++:+:: // @::+::::@ =++::-::: // +::=::::: @+*+:-+++-: // @::+-:::::# +++::::::@ // ::%=:::::::%@ @%++::::*** // @:+@*:::::::****@ +@+++:-=*:*@ // *:@@%::::::::=**** @%@+++:::#**@ // *%@@@-:::::::%=+==*@ +@%+++:***+* // #%@@%%::::::::#+=-=# =+@+++++:::*+ // @####+::::::::%+=@#%#=@ @**@@%=++::::@ // @ +:::::::::***#*@ @@###+=+=%@ +**#+=+*+:::- // =-:::::::%%%%@@ @#=*########%#+*%%+--@*+::% // +---%@ @@ =-:-**:# // %%%%% @+--*@ // @%%%%@ @%%%%% // @%%@@
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...