历次考试总结 Test:NoiOnline 2020 (20200425) *说明:

考试策略

经验和教训

第一题:(color)

期望得分:100 实际得分:100 改后得分:100

解题思路

这道题是一道数学题。还好。假设(p_1<p_2)

以两个(p_1)(p_2)的共同倍数之间的区间为一个单位。这中间(不包括两端)一共会有(frac{lcm(p_1,p_2)}{p_1}-1)(p_1)的倍数。它们会被(frac{lcm(p_1,p_2)}{p_2}-1)(p_2)的倍数分成(frac{lcm(p_1,p_2)}{p_2})个部分,每个部分的个数会尽量平分,个数差不会大于1。所以就可以得到最长的连续(p_1)个数。和k比较就可以了。

失分原因

解决办法

第二题:(sequence)

期望得分: 50 实际得分:50 改后得分:0

解题思路

我只会暴力。(O(N^2))

实际上,这道题并不需要什么高级算法。陈亮恺举了一个样例,把每一个区间的答案列出来,发现了规律,然后就可以用线段树解决问题。

线段树维护的是函数值的区间和而不是函数值的平方区间和。l=1时的平方区间和可以(O(N))算出,后面就只要把该减去的减去就可以了,不需要维护平方和本身。

失分原因

当时把这道题复杂化,以为要用到什么类似莫队的高级算法,没有对一个实例进行推演。

解决办法

做题之前先自己造几个数据玩一玩发现题目内部的性质。

第三题:()

期望得分:10 实际得分:0 改后得分:0

解题思路

连暴力都没有打完,只写了个链的解法。因为题意有歧义所以无法估分,大概是10分。

正解:首先用怎么想都想不到的dp做:

dp[i][j]表示i的子树中有j对产生贡献的点对的方案数。

然后就有了转移:

在i号点不加入的时候:

[dp[i][j + k] = sum_{son}dp[son][j] imes dp[i][k] ]

在i号点加入的时候:用A[i]表示i的子树中小A的点的个数,用b[i]表示小B的点的个数。

[dp[i][j]+=f[i][j-1] imes max((B[i]-(j-1)),0) ]

在树形DP结束之后,用到了一个叫做二项式反演的东西:

[g(k)=sum_{i=k}^n C_i^kf(i)Leftrightarrow f(i)=sum_{k=i}^n (-1)^{n-k}C_k^i g(k) ]

设答案(H(k)=)正好k对造成贡献的点对的方案数。

我们需要一个反演的(G(i))满足:

[G(k) = sum_{i=k}^m C_i^kH(i) ]

yxt设的是:

[G(k)=dp[1][k] imes (m - k)! ]

这个转化有点看不懂了。

失分原因

暴力没打完。优先写的应该是暴力。

解决办法

有时候不要纠结定理的证明。更重要的是会使用。

*说明:

期望得分:考试结束时预估分 实际得分:考后评测分

改后得分:可能不能完全改对,写上改后最高分

解题思路:可详可略,可以不写,可以写在做题记录里。

失分原因:从心态调节、时间分配、算法分析、知识点掌握、代码实现/调试能力、细节的分析和处理、审题测试等做题习惯多个维度分析。

解决办法:针对前面导致失分的每一个原因,找到一个防止以后出现同类问题的明确解决办法