문제 링크
- http://icpc.me/13352
문제 출처
- 2016 BAPC 예선 J번
사용 알고리즘
- 랜덤
시간복잡도
- $O(N \cdot iteration)$
풀이
두 점을 랜덤으로 선택해서 직선을 하나 만들고, 그 직선에 포함되지 않은 점들을 다른 한 직선으로 커버할 수 있는지 확인하는 랜덤 풀이를 시도해볼 수 있습니다. 점이 $N$개 있고, 두 직선에 점이 각각 $a, b$개($a+b=N$) 포함된다고 하면, 실제로 정답이 존재할 때 정답을 찾지 못할 확률(실패할 확률)은 $\frac{ab}{N\choose 2} \approx \frac{2ab}{N^2}$입니다.
$a = b = N/2$일 때 실패할 확률이 최대가 되며, 이때 실패할 확률은 대략 $\frac{2 \cdot \frac{N}{2}\cdot\frac{N}{2}}{N^2} = \frac{1}{2}$입니다. 최악의 경우에도 실패할 확률이 $\frac{1}{2}$보다 크지 않기 때문에 이 풀이를 $K$번 반복해서 수행하면 실패할 확률은 $(\frac{1}{2})^K$이하가 되고, 시간 복잡도는 $O(NK)$입니다.
전체 코드
1 |
|