Submission #463816

#TimeUsernameProblemLanguageResultExecution timeMemory
463816MamedovTriangles (CEOI18_tri)C++17
100 / 100
23 ms2140 KiB
#pragma GCC optimize("Ofast") #include <bits/stdc++.h> #include "trilib.h" #define ll long long #define ui unsigned int #define pii pair<int, int> #define piii pair<int, pii> #define pb push_back #define f first #define s second #define oo (1ll << 60) using namespace std; mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); bool cmpD(int p1, int p2) { return is_clockwise(1, p1, p2); } bool cmpU(int p1, int p2) { return !is_clockwise(1, p1, p2); } void Find_CH(vector<int> &v, int dr) { v.pb(1); int ptr = 2; int i = 3; for(int i = 3; i < (int)v.size(); ++i) { while((dr ^ is_clockwise(v[ptr - 1], v[ptr], v[i]))) { --ptr; } v[++ptr] = v[i]; } while((int)v.size() > ptr + 1) v.pop_back(); } void solve() { int n = get_n(); vector<int>U, D; D.pb(1); D.pb(2); U.pb(1); U.pb(2); for(int i = 3; i <= n; ++i) { if(is_clockwise(1, 2, i)) { D.pb(i); }else { U.pb(i); } } sort(D.begin() + 2, D.end(), cmpD); Find_CH(D, 1); D.pop_back(); reverse(D.begin(), D.end()); D.pop_back(); sort(U.begin() + 2, U.end(), cmpU); Find_CH(U, 0); reverse(U.begin(), U.end()); U.pop_back(); U.pop_back(); while(D.size() && U.size()) { if(D.size() > 1 && is_clockwise(D[D.size() - 2], D[D.size() - 1], U.back())) D.pop_back(); else if(U.size() > 1 && is_clockwise(D.back(), U[U.size() - 1], U[U.size() - 2])) U.pop_back(); else break; } reverse(D.begin(), D.end()); reverse(U.begin(), U.end()); while(D.size() && U.size()) { if(U.size() > 1 && is_clockwise(U[U.size() - 2], U[U.size() - 1], D.back())) U.pop_back(); else if(D.size() > 1 && is_clockwise(U.back(), D[D.size() - 1], D[D.size() - 2])) D.pop_back(); else break; } give_answer(U.size() + D.size()); } int main() { ios_base::sync_with_stdio(false); int t = 1; while(t--) { solve(); } return 0; }

Compilation message (stderr)

tri.cpp: In function 'void Find_CH(std::vector<int>&, int)':
tri.cpp:26:9: warning: unused variable 'i' [-Wunused-variable]
   26 |     int i = 3;
      |         ^
#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...