[ABC202F]Integer Convex Hull
Posted Tan_tan_tann
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[ABC202F]Integer Convex Hull相关的知识,希望对你有一定的参考价值。
Integer Convex Hull
题解
首先一看到这种求凸包面积为整数的,我们应该很容易想到dp 大概真的很容易想到吧
我们先考虑一下对于一个凸包我们怎么求它的面积,我们可以考虑把它拆分成三角形。
首先,对于一个凸包,它是有上下两条轮廓线的。
对于上轮廓线,我们就加上相邻的两个点与原点组成的三角形,对于下轮廓线,就将其减去。
这样,对于一个有
n
n
n个点的三角形,我们就可以
O
(
n
)
O\\left(n\\right)
O(n)地将其求出。
由于它只要求面积是整数,并不要求面积的大小,三角形面积是加还是减并不重要,不妨就让下轮廓的三角形也是加,这并不会影响答案。
对于
S
△
A
B
C
S_{\\triangle} ABC
S△ABC,我们可以通过正弦定理得到:
S
△
A
B
C
=
1
2
A
B
⋅
A
C
⋅
sin
A
=
1
2
∣
A
B
→
∣
∣
A
C
→
∣
sin
A
=
1
2
∣
A
B
→
×
A
C
→
∣
S_{\\triangle} ABC=\\frac{1}{2}AB\\cdot AC\\cdot \\sin\\,A=\\frac{1}{2}\\left|\\overrightarrow{AB}\\right|\\left|\\overrightarrow{AC}\\right|\\sin\\,A=\\frac{1}{2}\\left|\\overrightarrow{AB}\\times \\overrightarrow{AC}\\right|
S△ABC=21AB⋅AC⋅sinA=21∣∣∣AB∣∣∣∣∣∣AC∣∣∣sinA=21∣∣∣AB×AC∣∣∣
恰好是向量的叉乘,我们可以将那个
1
2
\\frac{1}{2}
21去掉,转化成判断奇偶性,也就是求出
∣
O
A
→
×
O
B
→
∣
=
X
A
Y
B
−
X
B
Y
A
\\left|\\overrightarrow{OA}\\times \\overrightarrow{OB}\\right|=X_{A}Y_{B}-X_{B}Y_{A}
∣∣∣OA×OB∣∣∣=XAYB−XBYA。
我们只需要求出轮廓线上相邻的两个点的叉乘就可以了。
于是我们很容易就联想到通过轮廓线来做
d
p
dp
dp,我们需要分上轮廓线与下轮廓线两条来进行。
设
u
p
i
,
j
,
0
/
1
up_{i,j,0/1}
upi,j,0/1表示上轮廓线上最后两个点的为
i
,
j
i,j
i,j,且此时已经得到面积的奇偶性为
0
/
1
0/1
0/1时的点的选择方案数,
d
n
i
,
j
,
0
/
1
dn_{i,j,0/1}
dni,j,0/1就表示下轮廓线上同样的东西。
很容易发现,对于上轮廓线,我们要求其上所有的向量都是不断向下弯曲的,即下一条边可以由上一条边顺时针翻折得到,这同样可以通过叉乘的值与
0
0
0的大小关系得到。
也就是说当
∣
P
i
P
j
→
×
P
j
P
k
→
∣
<
0
\\left|\\overrightarrow{P_{i}P_{j}}\\times \\overrightarrow{P_{j}P_{k}}\\right|< 0
∣∣∣PiPj×PjPk∣∣∣<0,我们就可以用
u
p
i
,
j
up_{i,j}
upi,j去更新
u
p
j
,
k
up_{j,k}
upj,k。
下轮廓线同理。
为了避免最后翻折到往回跑的情况,我们可以先将所有的点按
x
x
x排序。
对于两点垂直的情况,我们可以单独将其放到下轮廓线中进行处理,这也要求我们对所有点要将
y
y
y作为第二关键字进行排序。
由于我们求的是最后的方案数,我们势必就要对身处其中的点的数量进行统计,记
o
v
e
r
i
,
j
over_{i,j}
overi,j表示在线段
P
i
P
j
P_{i}P_{j}
PiPj之上的点的个数。
那么下轮廓线的转移相当于
d
n
i
,
j
=
∑
k
=
1
j
−
1
[
∣
P
i
P
j
→
×
P
j
P
k
→
∣
⩾
0
]
2
o
v
e
r
k
,
i
d
n
k
,
i
dn_{i,j}=\\sum_{k=1}^{j-1}\\left[\\left|\\overrightarrow{P_{i}P_{j}}\\times \\overrightarrow{P_{j}P_{k}}\\right|\\geqslant 0\\right]2^{over_{k,i}}dn_{k,i}
dni,j=k=1∑j−1[∣∣∣PiPj×PjPk∣∣∣⩾0]2ovConvex hull凸包
hdu 6219 Empty Convex Polygons
2017ACM/ICPC亚洲区沈阳站 C Hdu-6219 Empty Convex Polygons 计算几何 最大空凸包