티스토리 뷰
백준 소스코드 [C++] 1708 볼록 껍질
#include <iostream>
#include <algorithm>
#include <queue>
#include <string.h>
#include <limits.h>
#include <vector>
#include <math.h>
#include <stack>
#include <bitset>
typedef long long ll;
using namespace std;
struct dot {
ll x, y;
};
vector<dot> dots;
int ccw(dot A, dot B, dot C) {
ll rot = (B.x - A.x) * (C.y - A.y) - (C.x - A.x) * (B.y - A.y);
if (rot > 0) return 1;
else if (rot < 0) return -1;
else return 0;
}
ll dist(dot a, dot b) {
return (a.x - b.x)*(a.x - b.x) + (a.y - b.y)*(a.y - b.y);
}
bool cmp(const dot& a, const dot& b) {
int val = ccw(dots[0], a, b);
if (val > 0) return true;
if (val < 0) return false;
if (dist(dots[0], a) < dist(dots[0], b)) return true;
return false;
}
vector<dot> graham() {
vector<dot> s;
for (int i = 0; i < dots.size(); i++) {
while (2 <= s.size() && ccw(s[s.size() - 2], s[s.size() - 1], dots[i]) <= 0)
s.pop_back();
s.push_back(dots[i]);
}
return s;
}
void convexhull() {
int temp = 0;
for (int i = 1;i < dots.size();i++)
if (dots[i].y < dots[temp].y || (dots[i].y == dots[temp].y && dots[i].x < dots[temp].x))
temp = i;
swap(dots[temp], dots[0]);
sort(dots.begin() + 1, dots.end(), cmp);
vector<dot> res = graham();
cout << res.size();
}
int main() {
ios_base::sync_with_stdio(false), cin.tie(nullptr);
int n;
cin >> n;
dots.resize(n);
for (int i = 0; i < n; i++)
cin >> dots[i].x >> dots[i].y;
convexhull();
return 0;
}
'백준' 카테고리의 다른 글
백준 소스코드 [C++] 16916 부분 문자열 (0) | 2020.10.27 |
---|---|
백준 소스코드 [C++] 2699 격자점 컨벡스헐 (0) | 2020.10.24 |
백준 소스코드 [C++] 1764 듣보잡 (0) | 2020.10.22 |
백준 소스코드 [C++] 12851 숨바꼭질 2 (0) | 2020.10.22 |
백준 소스코드 [C++] 11722 가장 긴 감소하는 부분 수열 (0) | 2020.10.10 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- WWDC19
- 컴퓨터 추상화
- observeOn
- 다익스트라 시간복잡도
- WWDC16
- CPU와 Memory
- 벨만포드 시간복잡도
- 최대 매칭
- HIG
- 코딩대회
- State Restoration
- 포드 풀커슨 알고리즘
- 강한 순환 참조
- 네트워크 유량
- 최단경로 문제
- WWDC17
- 네트워크 플로우
- mach-o
- 벨만포드 알고리즘
- 부스트캠프 6기
- Testable
- 에드몬드 카프 알고리즘
- WWDC21
- rxswift
- IOS
- 최단경로 알고리즘
- MeTal
- 최단경로문제
- test coverage
- CompositionalLayout
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함