본문 바로가기

technique

(3)
선분에 대한 질의 https://codeforces.com/blog/entry/72330 위 에디토리얼과 그 댓글들을 참조했습니다. 이런 선분들이 있을 때, 교차하는 선분 쌍 (u,v), (v,w)를 만들 수 있는 방법에 대해 소개하고자 한다. 쉬울 것 같지만 필자 기준으로 이해하는 데 상당한 시간이 걸렸다. 1. 각 정점의 양 끝점을 P a[MAX]에 담아둔다. 2. vector evs에 (a[i].first, i) 와 (a[i].second, i)를 모두 담아서 오름차순 정렬한다. 3. set cand를 마련한다. (아직 교차할 정점을 찾을 여지가 남은 정점의 (우측끝점, 정점번호)를 기억해 두기 위함.) 4. 정렬해둔 evs를 차례로 순차하면서 ( evs는 선분이 아닌, 선분에 속한 끝점과 그 선분의 번호를 의미함에..
bithack LIST 홀수 판별 -1 판별 부호 판별 두 수의 부호 일치 2의 승수 판별 2의 승수로 곱하기, 나누기 2의 승수로 나눈 나머지 2의 승수로 올림 완전이진트리 swap 가장 작은 비트가 나타내는 값 bit로 나타낸 이진 순열의 다음 순열 bool 배열 메모리 최적화 1. 홀수 판별 모든 홀수는 이진수로 나타내면 0번 비트가 켜져있으므로, 0번 비트를 검사해주면 된다. 1 2 if (a & 1) // a가 홀수 else if (!(a & 1)) // a가 짝수 cs 2. -1 판별 -1의 이진수표현은 모든 비트가 켜진 것이므로, ~(-1)은 모든 비트가 꺼진 0이다. 따라서 ~a가 0이라면 a는 -1, ~a가 0이 아닌 수라면 a는 -1이 아닌 수이다. 1 2 3 4 5 for(int i = n - 1;..
모양 정돈 짜잘하고 어디 쓸데도 없어보이지만 KOI, swexpertacademy에서 풀어 볼 문제가 있기 때문에 알아두면 좋을 것 같다. bfs, 정렬 등 방법은 많지만 가장 간단한 방법을 소개하려고 한다. 이 방법은 이해만 해두면 구현은 두세줄 정도로 매우 쉽다! 빨강, 초록, 파랑 바구니에 여러개의 빨강, 초록, 파랑공이 무작위로 담겨있을 때, 각 공을 색깔에 맞는 바구니에 넣고자 한다. 두 공의 위치를 바꾸는 행동을 최소 몇 번해야 완벽히 정돈될까? 다음과 같은 상황을 생각해보자. (1) 우선 빨간색 바구니부터 채운다. 빨간 바구니의 초록공은 최대한 초록 바구니의 빨간공과 교환한다. 빨간 바구니의 파란공은 최대한 파란 바구니의 빨간공과 교환한다. 더보기 (이 경우엔 빨간 바구니의 초록공이 파란 바구니로 들어..