제출 #582633

#제출 시각아이디문제언어결과실행 시간메모리
582633amunduzbaevTriangles (CEOI18_tri)C++17
20 / 100
1 ms304 KiB
#include "trilib.h" #ifndef EVAL #include "trilib.c" #endif #include "bits/stdc++.h" using namespace std; #define ar array typedef int64_t ll; //~ void WA(){ //~ give_answer(n + 1); //~ exit(0); //~ } vector<int> Sort(int l, int r){ if(l == r) return {l}; int m = (l + r) >> 1; auto lx = Sort(l, m), rx = Sort(m + 1, r); vector<int> res; l = 0, r = 0; while(l < (int)lx.size() || r < (int)rx.size()){ if(l < (int)lx.size() && r < (int)rx.size()){ if(is_clockwise(1, lx[l], rx[r])){ res.push_back(lx[l++]); } else { res.push_back(rx[r++]); } } else if(l < (int)lx.size()){ res.push_back(lx[l++]); } else { res.push_back(rx[r++]); } } return res; } signed main(){ //~ ios::sync_with_stdio(0); cin.tie(0); int n = get_n(); vector<int> p = Sort(2, n); int m = p.size(), sz = 0; vector<int> last, is(n, 1); is[0] = 0; for(int i=0;i<m;i++){ while(sz > 1 && !is_clockwise(last[sz - 2], last[sz - 1], p[i])){ is[last.back() - 1] = 0; last.pop_back(); sz--; } last.push_back(p[i]); sz++; } auto check = [&](int a, int b){ ar<int, 2> cc {}; for(int i=1;i<=n;i++){ if(i == a || i == b) continue; cc[is_clockwise(a, b, i)]++; } return (cc[0] == 0 || cc[1] == 0); }; if(check(1, last[0]) && check(1, last[sz - 1])){ give_answer((int)last.size() + 1); return 0; } for(int i=0;i<m;i++){ while(sz > 1 && !is_clockwise(last[sz - 2], last[sz - 1], p[i])){ is[last.back() - 1] = 0; last.pop_back(); sz--; } last.push_back(p[i]); sz++; } int sum = accumulate(is.begin(), is.end(), 0); give_answer(sum); 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...