历次考试总结
Test:NoiOnline 2020 (20200425)
考试策略
经验和教训
第一题:(color)
期望得分:100 实际得分:100 改后得分:100
解题思路
这道题是一道数学题。还好。假设\(p_1
以两个\(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]\times dp[i][k] \]在i号点加入的时候:用A[i]
表示i的子树中小A的点的个数,用b[i]
表示小B的点的个数。
在树形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]\times (m - k)! \]这个转化有点看不懂了。
失分原因
暴力没打完。优先写的应该是暴力。
解决办法
有时候不要纠结定理的证明。更重要的是会使用。
*说明:
期望得分:考试结束时预估分 实际得分:考后评测分
改后得分:可能不能完全改对,写上改后最高分
解题思路:可详可略,可以不写,可以写在做题记录里。
失分原因:从心态调节、时间分配、算法分析、知识点掌握、代码实现/调试能力、细节的分析和处理、审题测试等做题习惯多个维度分析。
解决办法:针对前面导致失分的每一个原因,找到一个防止以后出现同类问题的明确解决办法