Submission #305129

#TimeUsernameProblemLanguageResultExecution timeMemory
305129miss_robotTriangles (CEOI18_tri)C++14
100 / 100
540 ms58984 KiB
#include "trilib.h" #include <bits/stdc++.h> #pragma GCC optimize("O3") using namespace std; map<tuple<int, int, int>, int> q; int qry(int a, int b, int c){ int d = a, e = b, f = c; if(f < d) swap(d, f); if(e < d) swap(d, e); if(e < f) swap(e, f); int dir; if(a == d) dir = (b == e); else if(a == e) dir = (b == f); else dir = (b == d); if(q.count({d, e, f})){ if(dir) return q[{d, e, f}]; return q[{d, e, f}]^1; } int r = is_clockwise(a, b, c); if(dir) q[{d, e, f}] = r; else q[{d, e, f}] = r^1; return r; } void qsort(deque<int>& p, deque<int>& t){ if(t.size() == 0) return; if(t.size() == 1){ p.push_back(t[0]); return; } int x = rand()%t.size(); deque<int> left, right; for(int i = 0; i < (int)t.size(); i++){ if(i == x) continue; if(qry(1, t[x], t[i])) right.push_back(t[i]); else left.push_back(t[i]); } qsort(p, left); p.push_back(t[x]); qsort(p, right); } int main(){ srand(time(0)); cin.tie(0); ios::sync_with_stdio(0); int n = get_n(); deque<int> p, t, h(n+1); for(int i = 2; i <= n; i++) t.push_back(i); qsort(p, t); int s = 2; h[0] = 1, h[1] = p[0]; for(int i = 1; i < n-1; i++){ while(s > 1 && !qry(h[s-2], h[s-1], p[i])) s--; h[s++] = p[i]; } int cng = 1; while(cng){ cng = 0; while(s > 2 && !qry(h[s-2], h[s-1], h[0])){ s--; cng = 1; } while(s > 2 && !qry(h[s-1], h[0], h[1])){ s--; h.pop_front(); cng = 1; } while(s > 2 && !qry(h[0], h[1], h[2])){ s--; int temp = h.front(); h.pop_front(), h.pop_front(); h.push_front(temp); cng = 1; } } give_answer(s); }
#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...