本文搬运自本人初中博客园博客,若图片加载不出来,可到原文查看:https://www.cnblogs.com/zhangtingxi/p/16459671.html

比赛地址

比赛情况

排名:20 / 1321
AC:5 / 6

总结

A

简单if

B

简单式子,可以发现相邻之间的 i2i^2(i+1)2(i+1)^2 可以互相抵消,最终式子为 (n+1)22×n(n+1)+1(n+1)^2-2\times n(n+1)+1

C

结构体排序

先判断长度,长度相等循环一遍寻找相同字母个数,那个什么 ×1b\times \frac{1}{|b|} 不用管,拿来迷惑人的

当时做题时在字典序那里卡了一下,字符数组转string直等就行

D

可以发现,每个 aia_i 不是取1就是取 bib_i,中间那些数是没有意义的,然后dp.

dpi,0dp_{i,0} 代表 ai=1a_i=1dpi,1dp_{i,1} 代表 ai=bia_i=b_i,转移直接从 dpi1,0dp_{i-1, 0}dpi1,1dp_{i-1, 1} 转移过来,也就是 ai1a_{i-1} 取1或 bi1b_{i-1}

有个细节就是例如一个数取1,后面是 bib_i,差是 bi1b_i-1 而不是 bib_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,显然 dpi=j<idpj+1(ajai=0)dp_i=\sum_{j<i} dp_j+1(a_j\vee a_i=0)

然后 O(n2)O(n^2),显然超时,暴力二进制容斥,然后不知为什么过不了

答案做法

运用类似折半搜索的思想。

dpx,ydp_{x,y} 代表假设现在结尾为 aia_i,高8位为x,低8位与上 aia_i 后八位为0的方案数。

假设 aia_i 的高8位为 hih_i,低8位为 lil_i

那么以 aia_i 结尾的方案数为 dphi,j  (jli=0)\sum dp_{h_i,j}\;(j\vee l_i=0),记为 ss

aia_i 的贡献在于所有的 dpj,li  (jhi=0)\sum dp_{j,l_i}\;(j\vee h_i=0)

答案为 s\sum s