문제
풀이
내적의 정의 $x_ix_j + y_iy_j$에서 식을 $y_i$로 묶으면
\[x_ix_j + y_iy_j = y_i\left(x_j\frac{x_i}{y_i} + y_j\right)\]변수가 $x_i/y_i$이고 기울기가 $x_j$, y 절편이 $y_j$인 직선으로 생각할 수 있습니다. 따라서 $x_j$를 기준으로 오름차순 정렬한 뒤 벡터마다 내적을 구해 최댓값을 출력하면 됩니다.
시간 복잡도는 $\mathcal{O}(N\log N)$입니다.
코드
코드에서는 유리수 구조체를 이용해 계산했지만 start를 long double 등으로 관리하고 값이 아니라 직선을 반환하는 식으로 작성해도 됩니다.
1 | |