RiseOJ는 solved.ac와 제휴 관계가 없습니다. 티어 아이콘 © solved.ac. solved.ac
포럼
R00682

겹겹의 양파 껍질

Diamond II 다이아몬드 II
난이도
6s
시간 제한
256MB
메모리 제한
0
맞았습니다!!
0
제출 수
0.0%
정답률
레이팅

의견: 0

설명

평면 위에 \(N\)개의 점이 주어진다 (같은 좌표의 점이 여러 개 있을 수 있다). 다음 규칙에 따라 모든 점에 '껍질 번호'를 매긴다.

  1. 현재 남아 있는 점들의 볼록 껍질(convex hull)을 생각한다. 이 볼록 껍질의 경계 위에 있는 점들(꼭짓점뿐 아니라 변 위에 놓인 점, 즉 껍질 내부에 엄밀히 포함되지 않는 모든 점)에게 현재 껍질 번호를 부여한다.

  2. 번호를 받은 점들을 모두 제거한다.

  3. 껍질 번호를 \(1\) 증가시키고, 남은 점이 있으면 1번으로 돌아간다.

껍질 번호는 \(1\)부터 시작한다. 남은 점들이 모두 한 직선 위에 있거나 서로 다른 좌표가 \(2\)개 이하라면, 그 점들은 모두 같은 껍질 번호를 받고 제거된다. 같은 좌표의 점들은 항상 같은 껍질 번호를 받는다.

이렇게 정한 각 점의 껍질 번호 \(c_1, c_2, \dots, c_N\) (입력 순서)에 대한 체크섬을 출력한다. 체크섬은 \(M = 2^{61}-1\), \(h_0 = 0\), \(h_k = (h_{k-1} \cdot 1000003 + c_k) \bmod M\) 으로 계산한 \(h_N\) 이다.

제약

\(1 \le N \le 100{,}000\)

\(-10^9 \le x_i, y_i \le 10^9\)

입력 형식

첫 줄에 점의 개수 \(N\)이 주어진다.

이어서 \(N\)개의 줄에 각 점의 좌표 \(x_i\), \(y_i\)가 주어진다.

출력 형식

껍질 번호 수열의 체크섬 \(h_N\) 한 개를 출력한다.

예제 1
입력
5
0 0
4 0
4 4
0 4
2 2
출력
1168770150067166736
설명

정사각형 네 꼭짓점은 껍질1, 가운데 (2,2)는 껍질2. 껍질 번호 수열 [1,1,1,1,2]의 체크섬을 출력.

예제 2
입력
4
0 0
2 0
4 0
2 3
출력
1000010000034000040
설명

삼각형 (0,0),(4,0),(2,3)의 변 (0,0)-(4,0) 위에 (2,0)이 놓여 있어 (2,0)도 껍질1에 포함된다. 네 점 모두 경계 위 -> 모두 껍질1. [1,1,1,1]의 체크섬.

문제 정보

riseoj 작성

출처 Original

평가 및 의견

겹겹의 양파 껍질

개요
출제자 난이도 Diamond II 다이아몬드 II 의견 0 / 50 공개 집계 (커뮤니티 난이도, 주요 주제, 품질)는 의견이 충분히 모이면 공개됩니다.

Log in to rate problems.

개별 의견

아직 의견이 없습니다. 자격이 된다면 위 양식에서 가장 먼저 평가해 보세요.

풀이 제출

겹겹의 양파 껍질

게스트로 둘러보고 있습니다. 로그인하면 풀이를 제출하고 진행 상황을 확인할 수 있습니다. 로그인하고 제출하기
공개
C++20 Tab 들여쓰기 · Ctrl+/ 주석 토글 · Enter 자동 들여쓰기
1 1 1 0 공백: 4 · UTF-8