牛客小白月赛53总结
比赛地址
比赛情况
排名:20 / 1321
AC:5 / 6
总结
A
简单if
B
简单式子,可以发现相邻之间的 \(i^2\) 和 \((i+1)^2\) 可以互相抵消,最终式子为 \((n+1)^2-2\times n(n+1)+1\)
C
结构体排序
先判断长度,长度相等循环一遍寻找相同字母个数,那个什么 \(\times \frac{1}{|b|}\) 不用管,拿来迷惑人的
当时做题时在字典序那里卡了一下,字符数组转string直等就行
D
可以发现,每个 \(a_i\) 不是取1就是取 \(b_i\),中间那些数是没有意义的,然后dp.
\(dp_{i,0}\) 代表 \(a_i=1\),\(dp_{i,1}\) 代表 \(a_i=b_i\),转移直接从 \(dp_{i-1, 0}\) 和 \(dp_{i-1, 1}\) 转移过来,也就是 \(a_{i-1}\) 取1或 \(b_{i-1}\)
有个细节就是例如一个数取1,后面是 \(b_i\),差是 \(b_i-1\) 而不是 \(b_i\).
E
小模拟+分类讨论
从大往小考虑:
- 边长为6显然需要一整个
- 边长为5也需要一整个,但有11个格子剩下,留给边长为1
- 边长为4也需要一整个,剩下空可以给5个边长为2
- 边长为3的4个一棋盘,如果有多,多三个,边长为2多1,边长为1多5;多两个,边长为2多3,边长为1多6;多三个,边长为2多5,边长为1多7
- 考虑边长为2,先前有多的空间占了,如果还有多余空间化为边长为1的空间,如果少,9个边长为2一棋盘,最后还有多化为边长为1
- 边长为1的先占了之前的,然后如果不够36个一棋盘,向上取整
注意多测清空
F
没做出。
考场想法
先暴力dp,显然 \(dp_i=\sum_{j<i} dp_j+1(a_j\vee a_i=0)\)
然后 \(O(n^2)\),显然超时,暴力二进制容斥,然后不知为什么过不了
答案做法
运用类似折半搜索的思想。
设 \(dp_{x,y}\) 代表假设现在结尾为 \(a_i\),高8位为x,低8位与上 \(a_i\) 后八位为0的方案数。
假设 \(a_i\) 的高8位为 \(h_i\),低8位为 \(l_i\)。
那么以 \(a_i\) 结尾的方案数为 \(\sum dp_{h_i,j}\;(j\vee l_i=0)\),记为 \(s\)
而 \(a_i\) 的贡献在于所有的 \(\sum dp_{j,l_i}\;(j\vee h_i=0)\)
答案为 \(\sum s\)
本文来自博客园,作者:zhangtingxi,转载请注明原文链接:https://www.cnblogs.com/zhangtingxi/p/16459671.html