牛客小白月赛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

小模拟+分类讨论

从大往小考虑:

  1. 边长为6显然需要一整个
  2. 边长为5也需要一整个,但有11个格子剩下,留给边长为1
  3. 边长为4也需要一整个,剩下空可以给5个边长为2
  4. 边长为3的4个一棋盘,如果有多,多三个,边长为2多1,边长为1多5;多两个,边长为2多3,边长为1多6;多三个,边长为2多5,边长为1多7
  5. 考虑边长为2,先前有多的空间占了,如果还有多余空间化为边长为1的空间,如果少,9个边长为2一棋盘,最后还有多化为边长为1
  6. 边长为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\)

posted @ 2022-07-08 21:17  zhangtingxi  阅读(39)  评论(0编辑  收藏  举报