제출 #169846

#제출 시각아이디문제언어결과실행 시간메모리
169846arnold518Triangles (CEOI18_tri)C++14
20 / 100
3 ms396 KiB
#include <bits/stdc++.h> #include "trilib.h" using namespace std; typedef long long ll; typedef pair<int, int> pii; typedef pair<ll, ll> pll; const int MAXN = 40000; int N, p, q; vector<int> A, B, D, C; bool ccw(int a, int b, int c) { return !is_clockwise(a, b, c); } int main() { int i, j; N=get_n(); for(i=3; i<=N; i++) { if(ccw(1, 2, i)) A.push_back(i); else B.push_back(i); } A.push_back(2); B.push_back(2); sort(A.begin(), A.end(), [&](const int &p, const int &q) { return ccw(1, p, q); }); sort(B.begin(), B.end(), [&](const int &p, const int &q) { return !ccw(1, p, q); }); A.insert(A.begin(), 1); B.insert(B.begin(), 1); vector<int> S; for(auto it : A) { while(S.size()>1 && !ccw(S[S.size()-2], S[S.size()-1], it)) S.pop_back(); S.push_back(it); } A=S; S.clear(); for(auto it : B) { while(S.size()>1 && ccw(S[S.size()-2], S[S.size()-1], it)) S.pop_back(); S.push_back(it); } B=S; S.clear(); A.erase(A.begin()); A.erase(A.begin()); B.erase(B.begin()); B.erase(B.begin()); //for(auto it : A) printf("%d ", it); printf("\n"); //for(auto it : B) printf("%d ", it); printf("\n"); vector<int> T; T=A; reverse(T.begin(), T.end()); T.push_back(2); for(i=0; i<B.size(); i++) while(T.size()>1 && !ccw(B[i], T[T.size()-1], T[T.size()-2])) D.push_back(T.back()), T.pop_back(); T.clear(); T=B; reverse(T.begin(), T.end()); T.push_back(2); for(i=0; i<A.size(); i++) while(T.size()>1 && ccw(A[i], T[T.size()-1], T[T.size()-2])) D.push_back(T.back()), T.pop_back(); T.clear(); T=A; T.push_back(1); for(i=B.size()-1; i>=0; i--) while(T.size()>1 && ccw(B[i], T[T.size()-1], T[T.size()-2])) D.push_back(T.back()), T.pop_back(); T.clear(); T=B; T.push_back(1); for(i=A.size()-1; i>=0; i--) while(T.size()>1 && !ccw(A[i], T[T.size()-1], T[T.size()-2])) D.push_back(T.back()), T.pop_back(); T.clear(); sort(D.begin(), D.end()); D.erase(unique(D.begin(), D.end()), D.end()); C.push_back(1); C.push_back(2); for(auto it : A) C.push_back(it); for(auto it : B) C.push_back(it); int ans=0; for(auto it : C) if(!binary_search(D.begin(), D.end(), it)) ans++; printf("%d", ans); }

컴파일 시 표준 에러 (stderr) 메시지

tri.cpp: In function 'int main()':
tri.cpp:57:12: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(i=0; i<B.size(); i++) while(T.size()>1 && !ccw(B[i], T[T.size()-1], T[T.size()-2])) D.push_back(T.back()), T.pop_back();
           ~^~~~~~~~~
tri.cpp:61:12: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(i=0; i<A.size(); i++) while(T.size()>1 && ccw(A[i], T[T.size()-1], T[T.size()-2])) D.push_back(T.back()), T.pop_back();
           ~^~~~~~~~~
tri.cpp:18:9: warning: unused variable 'j' [-Wunused-variable]
  int i, j;
         ^
#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...