2020.07.17【NOIP普及组】模拟赛C组2 总结

2020.07.17 2020.07.17 2020.07.17 N O I P NOIP NOIP普及组】模拟赛 C C C 2 2 2 总结

这次考试不是很难,但是我只考了 268.3 268.3 268.3分,原因出在第三题。

第一题:谷仓的安保

解题方法

这道题目我们直接搜索即可。
首先将输入的字符排序。
然后暴力搜索(类似全排列)就行了。
注意:到了 25000 25000 25000个之后要关闭程序。

得分情况

满分。

第二题:跳房子

解题方法

这道题目我们开一个 1000000 1000000 1000000的数组。
然后直接深搜即可。
每一次有一个新的数,答案就加一。

得分情况

满分。

第三题:卫星照片

解题方法

就是求联通块的最大大小。
直接对于每一个没有标记的点进行 d f s dfs dfs,并遇到一个新的点就标记和答案加一。
时间复杂度为 O ( n 2 ) O(n^2) O(n2)

得分情况

58.3 58.3 58.3分。

第四题:统计蚂蚁

解题方法

f i , j f_{i,j} fi,j表示前 i i i种类型的蚂蚁用了 j j j个的方案数。

f i , j = ∑ k = 0 n i f i − 1 , j − k \begin{aligned}f_{i,j}=\sum_{k=0}^{n_i}{f_{i-1,j-k}}\end{aligned} fi,j=k=0nifi1,jk
但是由于 j j j可能小于 n i n_i ni,所以 f i , j = ∑ k = 0 m i n ( n i , j ) f i − 1 , j − k \begin{aligned}f_{i,j}=\sum_{k=0}^{min(n_i,j)}{f_{i-1,j-k}}\end{aligned} fi,j=k=0min(ni,j)fi1,jk
我们发现这种算法是 O ( T × ∑ i = 1 A n i ) \begin{aligned}O(T\times{\sum_{i=1}^{A}{n_i}})\end{aligned} O(T×i=1Ani)
数据很水,可以过掉。
最优方法是进行前缀和优化。
s i , j s_{i,j} si,j表示前 i i i种类型的蚂蚁用了 0 − j 0-j 0j个的方案数之和。
也就是 s i , j = ∑ k = 0 j f i , k \begin{aligned}s_{i,j}=\sum_{k=0}^{j}{f_{i,k}}\end{aligned} si,j=k=0jfi,k
运用前缀和优化可得 s i , j = s i , j − 1 + f i , j s_{i,j}=s_{i,j-1}+f_{i,j} si,j=si,j1+fi,j
根据上面这条式子: f i , j = ∑ k = 0 m i n ( n i , j ) f i − 1 , j − k \begin{aligned}f_{i,j}=\sum_{k=0}^{min(n_i,j)}{f_{i-1,j-k}}\end{aligned} fi,j=k=0min(ni,j)fi1,jk
因为是求从 j − m i n ( n i , j ) j-min(n_i,j) jmin(ni,j) j j j f f f的第 i i i项的和,所以
f i , j = s i − 1 , j − s i − 1 , j − m i n ( n i , j ) − 1 f_{i,j}=s_{i-1,j}-s_{i-1,j-min(n_i,j)-1} fi,j=si1,jsi1,jmin(ni,j)1
由此,我们得出了求 s i , j s_{i,j} si,j f i , j f_{i,j} fi,j的公式,可以解决此问题。
时间复杂度降为 O ( A T ) O(AT) O(AT)

得分情况

10 10 10分。

你可能感兴趣的:(比赛总结)