DOJ logoDOJ
题目
最近添加的题目收藏的题目Workbooks
分类DLC比赛小组团队讨论区
排名
解题数量排行榜连续解题排名DOJ Power 排行榜
评测状态
征题登录注册
DOJ logoDOJ

支持 OI 子任务计分、Elo 等级分和 Discord 认证的社区在线评测系统。

题目
题目列表分类
社区
比赛排名讨论区公告举办外部比赛指南
账号
登录注册评测状态
政策
服务条款DLC 使用规则隐私政策API 文档语言运行环境比赛排名奖励评级与表现
© 2026 DOJ
保留所有权利
题解

A Segment and Triangles

返回题目

题解

직선 PQPQPQ의 한쪽에 있는 점의 수를 n+n_+n+​, 반대쪽에 있는 점의 수를 n−n_-n−​라 하자. 세 꼭짓점이 모두 같은 쪽에 있는 삼각형은 선분 PQPQPQ와 만나지 않으므로 관계 4에 해당한다. 이러한 삼각형은 (n+3)+(n−3)\binom{n_+}{3}+\binom{n_-}{3}(3n+​​)+(개이다.

이제 두 쪽에 모두 꼭짓점이 있는 삼각형을 생각하자. 한쪽에 꼭짓점 UUU가 하나 있고 반대쪽에 두 꼭짓점 V,WV,WV,W가 있다고 하자. 직선 UVUVUV와 직선 PQPQPQ의 교점 위치를 다음과 같이 분류한다.

  • LLL: 교점이 PPP보다 앞에 있다.
  • MMM: 교점이 선분 PQPQPQ의 내부에 있다.
  • RRR: 교점이 QQQ보다 뒤에 있다.

UWUWUW도 같은 방법으로 분류한다. 두 교점은 삼각형과 직선 PQPQPQ가 만나는 구간의 양 끝점이다. 따라서 두 분류에 따라 삼각형의 관계가 다음과 같이 정해진다.

  • L,RL,RL,R: 관계 1.
  • L,ML,ML,M 또는 M,RM,RM,R: 관계 2.
  • M,MM,MM,M: 관계 3.
  • 또는 : 관계 4.

고정한 UUU에 대하여 반대쪽 점 중 분류가 L,M,RL,M,RL,M,R인 점의 수를 각각 lU,mU,rUl_U,m_U,r_UlU​,m라 하자. 이 꼭짓점이 한쪽에 혼자 있는 삼각형들이 네 관계에 기여하는 수는 순서대로 다음과 같다.

lUrU,mU(lU+rU),(mU2),(lU2)+(rU2).l_Ur_U,\qquad m_U(l_U+r_U),\qquad \binom{m_U}{2},\qquad \binom{l_U}{2}+\binom{r_U}{2}.lU​rU​

두 쪽에 모두 꼭짓점이 있는 삼각형에는 한쪽에 혼자 있는 꼭짓점이 유일하므로, 모든 UUU에 대해 이 값을 더하면 각 삼각형을 정확히 한 번 센다.

lU,mU,rUl_U,m_U,r_UlU​,mU​,rU​를 빠르게 구하자. 좌표계에 아핀 변환을 적용하여 P=, 이라 생각해도 된다. 점 에 대해

aX=xXyX,bX=xX−1yXa_X=\frac{x_X}{y_X},\qquad b_X=\frac{x_X-1}{y_X}aX​=yX​

를 정의한다. 일반 위치 조건에 의해 모든 yXy_XyX​는 000이 아니며, 정렬 과정에서 같은 값도 생기지 않는다.

UUU가 직선 PQPQPQ의 위쪽에 있다면

lU=#{V:aV>aU},rU=#{V:bV<bU}l_U=\#\{V:a_V>a_U\},\qquad r_U=\#\{V:b_V<b_U\}lU​=#{V:aV​

이다. 여기서 VVV는 항상 UUU의 반대쪽 점만을 뜻한다. UUU가 아래쪽에 있다면 부등호 방향이 모두 반대가 된다. 따라서 모든 점을 aXa_XaX​ 순서로 정렬하고 양쪽 점의 누적 개수를 세면 모든 lUl_U를 구할 수 있다. 모든 점을 순서로 다시 정렬하면 모든 를 구할 수 있다. 마지막으로

mU=(U의 반대쪽 점 수)−lU−rUm_U=(U\text{의 반대쪽 점 수})-l_U-r_UmU​=(U의 반대쪽 점 수)−lU​

이다.

나눗셈과 부동소수점은 필요하지 않다. d⃗=Q−P\vec d=Q-Pd=Q−P라 하자. 기준점 BBB가 PP 또는 일 때 다음 분수를 정렬하면 각각 , 의 순서를 얻는다.

d⃗⋅(X−B)d⃗×(X−P)\frac{\vec d\cdot(X-B)}{\vec d\times(X-P)}d×(X−P)

분모가 음수이면 분자와 분모의 부호를 함께 바꾸고, 두 분수는 교차 곱으로 비교한다. 좌표 범위 때문에 교차 곱에는 부호 있는 128비트 정수가 필요하다.

두 번의 정렬이 필요하므로 시간 복잡도는 O(Nlog⁡N)O(N\log N)O(NlogN)이고, 공간 복잡도는 O(N)O(N)O(N)이다.

Solution written by GPT5

3
n−​
​
)
L,LL,L
L,L
R,RR,RR,R
U
​
,
rU​
,
mU​
(
lU​
+
rU​),(2mU​​),(2lU​​)+
(2rU​​).
(0,0)P=(0,0)
P=(0,0)
Q=(1,0)Q=(1,0)Q=(1,0)
X=(xX,yX)X=(x_X,y_X)X=(xX​,yX​)
xX​
​
,
bX​
=
yX​xX​−1​
>
aU​},rU​=
#{V:
bV​<
bU​}
lU​
bXb_XbX​
rUr_UrU​
−
rU​
P
QQQ
aXa_XaX​
bXb_XbX​
d⋅(X−B)
​