NOI模拟赛 4.25
赛时时间分配
约10min读完+初步思考三道题
约25min完成T1
约40min思考T2+完成T2的30pts暴力,继续思考十几分钟未果
约30min思考T3+完成T3的16pts暴力,发现答案似乎存在一些规律,最终T3用2h左右打出
T1:抛硬币coin
题意
抛硬币,正面向上的概率为\(p\),求第一次出现连续\(k\)次正面向上的期望步数。
题解
比较经典的期望问题,赛时用时约20min。
Tips
赛时丢失了对\(p=1\)的特判。
T3:一堆数math
题意
\(3\leq L \leq 10^7,L<n<10^9+7,L\)为奇数。
题解
赛时用时\(2h+\),通过打表找规律做出。
通过打表找规律发现答案序列一定含以下这个子序列(以\(L=7\)为例):
其中第一项为\(L\),第二三项为\(\lfloor\frac{L}{2}\rfloor\),其余以两项为一组递减。
由于相邻相同的数字只有前两项会有贡献,因此:
第一问答案为等差数列求和
第二问答案为隔板法(剩余位置可随便放)
Tips
官方题解的数学证明,放缩的方法非常少见...
T2:技能树tree
题意
\(n,q\leq10^6\)
题解
赛时只完成了\(30pts\)部分分:考虑倒着从叶子节点开始按深度染色,用时约\(1h\),实际上\(40pts\)的部分分也比较好做:顺次删除所有有儿子的节点即可。
考虑构造一种方案:先用\(j\)次染完前\(j\)层的节点,之后除最后一步外每一步都染恰好\(k\)个位置。由于每一次的贡献最大为一层/\(k\)个,这样构造出来的次数一定最小的。
此时答案即为\(j+\lceil \frac{s_j}{i}\rceil\)(\(s_j\)表示深度\(>i\)的节点个数)。
下面证明方程\(f_i=\max\{j+\frac{s_j}{i}\}\)(注意不带取整符号)的决策点\(j\)即为上面答案中的\(j\)。
(1)证明决策点\(j\)一定为合法方案。
设深度为\(i\)的节点个数为\(C_i\)
首先证明可以用\(j\)次染完前\(j\)层的节点:
由\(f_i>f_{i-1}\)得\(k\geq C_j\),则倒着染第\(j\)层时用一次可以染完它,甚至可以富裕一些染色次数留给上面。
由\(f_i>f_{i-2}\)得\(2k\geq C_j+C_{j-1}\),则倒着染时可以用两次染完第\(j-1、j\)层,由此归纳可以证明可以用\(j\)次染完前\(j\)层的节点。
之后证明除最后一步外每一步都可以染恰好\(k\)个位置:
由\(f_i>f_{i+1}\)得\(k\leq C_{j+1}\),则第\(k+1\)次操作可以染恰好\(k\)个格子,随后用类似上面的方法可归纳证明。
(2)证明其余次数作为决策点时不可以:利用上面得出的式子可以直接证明。
Tips
对于贪心的部分分,可以进一步思考降低复杂度后贪心的正确性是否仍然可以保证。