BestCoder Round #93

传送门

其实看官方题解就好,我只是想记录一下自己干了什么

1001,因为每个位置一定要铲且只能铲一次,那从第一个位置开始每次铲尽量长的一段就行了(好像有人用map做超时了,离散化会靠谱些?)
1002,可以枚举去掉K位数字后最高位是原数的第几位,预处理一下后缀,判一下就行了吧
1003,期望× 26n 26 n 后是所有串的次数和,若位置 i i 置换回自己的环长度是si,那么串置换回自己的次数是 lcm(s1,s2....,sn) l c m ( s 1 , s 2.... , s n ) ,长度相同的环对lcm贡献一样,所以可以看做同一个环,因为26个字母最多只会有6个长度不同的环,所以可以矩乘,不同环个数为m,就用一个 2m2m 2 m ∗ 2 m 的矩阵,表示每种长度的环是否出现
还可以用容斥,枚举最终的串有哪些环,再枚举他们的子集容斥一下
1004,折半搜索,搜完两边各 215 2 15 次方个子集后,考虑合并,要求出子集的元素和及两两相乘的和,设左半的为 Ai,Bi A i , B i ,右半的为 Cj,Dj C j , D j ,若 i,j i , j 能够组合在一起,
满足 AiCj+Bi+Dj>=0 A i ∗ C j + B i + D j >= 0
然后移项得 AiCj+Bi>=Dj A i ∗ C j + B i >= − D j
(Cj,Dj) ( C j , − D j ) 视为平面上一点,对于 i i 就是求Aix+Bi下方的点数,用kd-tree即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值