DOJ logoDOJ
問題
最近追加された問題保存した問題Workbooks
カテゴリDLCコンテストグループチーム掲示板
ランキング
正解数ランキングストリークランキングDOJ Powerランキング
提出状況
問題募集ログイン新規登録
DOJ logoDOJ

OI形式のサブタスク採点、Eloレーティング、Discord連携を備えたオンラインジャッジです。

問題
問題一覧カテゴリ
コミュニティ
コンテストランキング掲示板お知らせ外部のコンテストを開催するガイド
アカウント
ログイン新規登録ジャッジ状態
ポリシー
利用規約DLCの利用規則プライバシーAPI 文書言語ランタイムコンテストの順位報酬レーティングとパフォーマンス
© 2026 DOJ
All rights reserved
解説

Yet Another Angular Sort Problem

問題に戻る

解説

두 점 Ai,AjA_i,A_jAi​,Aj​를 잇는 직선이 ℓ\ellℓ과 만날 때 두 점의 각도 순서가 서로 바뀐다. 두 직선이 평행하지 않다면 이런 변화는 정확히 한 번 일어나고, 순열에서는 두 번호 i,ji,ji,j가 맞바뀌므로 변화량에 2∣i−j∣2|i-j|2∣i−j∣를 더한다. 두 점을 잇는 직선이 ℓ\ellℓ과 평행하면 변화가 일어나지 않는다.

모든 쌍에 대한 2∣i−j∣2|i-j|2∣i−j∣의 합은

N(N−1)(N+1)3\frac{N(N-1)(N+1)}{3}3N(N−1)(N+1)​

이다. Ai=(xi,yi)A_i=(x_i,y_i)Ai​=(xi​,yi​)에 대해 라 두면, 가 과 평행할 필요충분조건은 이다. 같은 를 갖는 인덱스들을 정렬해 그 안의 합을 전체 합에서 빼면 된다. 시간 복잡도는 이다.

vi=axi+byiv_i=ax_i+by_i
vi​=axi​+byi​
AiAjA_iA_jAi​Aj​
ℓ\ellℓ
vi=vjv_i=v_jvi​=vj​
viv_ivi​
2∣i−j∣2|i-j|2∣i−j∣
O(Nlog⁡N)O(N\log N)O(NlogN)