2020.04.15 2020.04.15 2020.04.15【 N O I P NOIP NOIP普及组】模拟赛 C C C组 26 26 26 总结
这次比赛我考了 240 240 240分,比我预计高了 10 10 10,但是下次还要继续努力。
第一题: G r a s s Grass Grass P l a n t i n g Planting Planting
题目
解题方法
方法 1 1 1:树形 d p dp dp
设
d
p
i
dp_i
dpi表示以
i
i
i为根的子树需要使用的最少的草的种类数,
f
i
f_i
fi表示
i
i
i节点的儿子个数,
b
i
b_i
bi表示与
i
i
i结点相连的结点数量。
除了根节点以外的其他结点都与
b
i
b_i
bi个结点相连,而有一个结点恰好是它的父亲结点。但是由于根结点没有父亲结点,因此
f
i
=
{
b
i
−
1
i
>
1
b
i
i
=
1
f_i=\begin{cases} b_i-1&i>1\\ b_i&i=1 \end{cases}
fi={bi−1bii>1i=1
注:这里我们假定
1
1
1是整棵树的根。
那么可以得到
d
p
i
=
max
j
∈
s
o
n
i
(
d
p
j
,
f
i
+
1
,
f
j
+
2
)
dp_i=\max_{j\in son_i}{(dp_j,f_i+1,f_j+2)}
dpi=maxj∈soni(dpj,fi+1,fj+2)
注:
s
o
n
i
son_i
soni表示
i
i
i的儿子。
上面式子的
d
p
j
dp_j
dpj表示以
j
j
j为根的子树需要使用的最少的草的种类数,
f
i
+
1
f_i+1
fi+1表示
i
i
i的儿子的数量再加上
i
i
i这个结点,
f
j
+
2
f_j+2
fj+2表示
j
j
j的儿子的数量再加上
i
i
i和
j
j
j两个结点。
那么答案就是
d
p
1
dp_1
dp1。
时间复杂度为
O
(
n
)
O(n)
O(n)。
方法 2 2 2:数学
设
b
i
b_i
bi表示与
i
i
i结点相连的结点数量。
我们可以发现,答案就是
max
i
=
1
n
b
i
+
1
\max_{i=1}^{n}{b_i}+1
maxi=1nbi+1。
时间复杂度为
O
(
n
)
O(n)
O(n)。
得分情况
比赛时满分。
第二题: I c y Icy Icy P e r i m e t e r Perimeter Perimeter
题目
解题方法
这道题的解题方法是搜索。
求面积:
其实求面积就是求最大的连通块,我们直接搜索就可以找到了。
求周长:
提出理论
周长就是搜索时越界或点的数量。
证明理论
现在有一个图,如下:
红色区域的周长是
4
4
4。
也就是从当前这个位置往
4
4
4个方向遍历,然后发现全部都是
‘
.
’
‘.’
‘.’,所以周长为
4
4
4。
这就证明了周长是点的数量。
那么现在有另外一个图,如下:
红色区域的周长是
8
8
8。
也就是
7
7
7个点加上
1
1
1个边界。
这就证明了周长是边界加点的数量。
证明结束。
注意:
d
f
s
dfs
dfs会爆栈,最好用
b
f
s
bfs
bfs(我就是这样被扣了
10
10
10分)!
得分情况
比赛时
90
90
90分。
改题后
100
100
100分。
第三题: M o u n t a i n Mountain Mountain V i e w View View
题目
解题方法
设
l
i
l_i
li和
r
i
r_i
ri分别表示第
i
i
i座山的左右端点。
则
l
i
=
x
i
−
y
i
,
r
i
=
x
i
+
y
i
l_i=x_i-y_i,r_i=x_i+y_i
li=xi−yi,ri=xi+yi
那么我们按左端点从小到大排序,然后如果左端点相等,就按右端点从大到小排序。
最后只要判断一下当前这座山是否大于前面的山就行了。
其实思路是贪心。
得分情况
比赛时
50
50
50分。
改题后满分。