Submission #116211

#TimeUsernameProblemLanguageResultExecution timeMemory
116211JohnTitorTriangles (CEOI18_tri)C++11
100 / 100
56 ms3492 KiB
#include <bits/stdc++.h> using namespace std; #define FOR(i, j, k) for(int i=(j); i<=(k); i++) #define FFOR(i, j, k) for(int i=(j); i<(k); i++) #define DFOR(i, j, k) for(int i=(j); i>=(k); i--) #define bug(x) cerr<<#x<<" = "<<(x)<<'\n' #define pb push_back #define mp make_pair #define bit(s, i) (((s)>>(i))&1LL) #define mask(i) ((1LL<<(i))) #define builtin_popcount __builtin_popcountll #define __builtin_popcount __builtin_popcountll using ll=long long; using ld=long double; mt19937_64 rng(chrono::high_resolution_clock::now().time_since_epoch().count()); const ld pi=acos(0)*2; template <typename T> inline void read(T &x){char c; bool nega=0; while((!isdigit(c=getchar()))&&(c!='-')); if(c=='-'){nega=1; c=getchar();} x=c-48; while(isdigit(c=getchar())) x=x*10+c-48; if(nega) x=-x;} template <typename T> inline void writep(T x){if(x>9) writep(x/10); putchar(x%10+48);} template <typename T> inline void write(T x){if(x<0){ putchar('-'); x=-x;} writep(x);} template <typename T> inline void writeln(T x){write(x); putchar('\n');} #define taskname "Triangles" #ifndef Aria #include "trilib.h" #else int get_n(){ int n; printf("get_n: \n"); read(n); return n; } bool is_clockwise(int a, int b, int c){ printf("is_clockwise %d %d %d: \n", a, b, c); bool res; read(res); return res; } void give_answer(int s){ printf("ans = %d\n", s); } #endif // Aria int n; int a[40001]; #define cw is_clockwise void quicksort(int l, int r){ if(l>=r) return; int m=rng()%(r-l+1)+l; vector <int> left, right; FOR(i, l, r) if(i!=m) if(cw(1, a[m], a[i])) left.pb(a[i]); else right.pb(a[i]); left.pb(a[m]); m=l+left.size()-1; for(int x: right) left.pb(x); FOR(i, l, r) a[i]=left[i-l]; left.clear(); right.clear(); quicksort(l, m-1); quicksort(m+1, r); } deque <int> v; int main(){ #ifdef Aria if(fopen(taskname".in", "r")) freopen(taskname".in", "r", stdin); #endif // Aria n=get_n(); FOR(i, 1, n) a[i]=i; quicksort(2, n); // FOR(i, 1, n) bug(a[i]); FOR(i, 1, n){ while(v.size()>=2){ if(cw(v[v.size()-2], v[v.size()-1], a[i])) v.pop_back(); else break; } v.pb(a[i]); } // bug(v.size()); // for(int x: v) bug(x); while(true){ int sz=v.size(); while(cw(v.back(), v[0], v[1])) v.pop_front(); while(cw(v[v.size()-2], v.back(), v[0])) v.pop_back(); if(v.size()==sz) break; } give_answer(v.size()); }

Compilation message (stderr)

tri.cpp: In function 'void quicksort(int, int)':
tri.cpp:46:20: warning: suggest explicit braces to avoid ambiguous 'else' [-Wdangling-else]
     FOR(i, l, r) if(i!=m) if(cw(1, a[m], a[i])) left.pb(a[i]);
                    ^
tri.cpp: In function 'int main()':
tri.cpp:80:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         if(v.size()==sz) break;
            ~~~~~~~~^~~~
#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...