BestCoder Round #93酱油记

今天请假逃了晚修来打BC,真的爽(晚上不用6:50去教室: ))

A

题目大意就是一个序列,然后每次覆盖掉一个没有相同元素的连续区间,不能覆盖已经覆盖掉的格子。
直接dp过去,用个map存一下某个元素上一次出现的位置。

B

题目大意:给出一个n位合法十进制,然后要求删掉恰好k个位置上的数,使得剩下的数模3等于零。
1<=n<=105
好麻烦的题目
先枚举最高位的位置i,那就是说这个位置i之前的数全都要删掉,然后显然对于一个数我们只考虑它模3是多少,然后考虑位置i后有r0个数模3等于0,有r1个数模3等于1,有r2个数模3等于2。
假设我们还要删掉k个数,然后要求剩下的位置的数模3等于v
如果v=1那么我们可以用掉一个1(r0,r1-1,r2,k-1)或者两个2(r0,r1,r2-2,k-2)
如果v=2那么我们可以用掉两个1(r0,r1-2,r2,k-2)或者一个2(r0,r1,r2-1,k-1)
以上两种都可以得到v=0的情况
如果v=0,那么我们强制1和2配对的数量不超过2(因为如果有三对就相当于选了3个2和3个1,这样做显然正确)
枚举1和2配对的个数,那么我们尽量选用3个1和3个2,剩下的再用0去补齐。
然后解决
要特判删剩下一个0的情况。

C

题目大意:有一个变换序列a[1..26]为’a’..’z’的排列,随机一个长度为n的由小写字母组成的字符串,经过一次变换后字符c会变成a[c],求随机串变回自己的变换次数的期望×26^n%1000000007
总感觉我的做法是全场写得最麻烦的。。
把变换序列的置换都搞出来
问题可以转化成随机序列的lcm的期望。
由于置换长度最多为26,那么我可以搜出所有可能的lcm,状态数很少,然后直接用矩阵乘法艹过去就好了

D

题目大意:给出集合S,其中有n(n<=30)个数,求满足元素的平方和小于元素的和的平方的子集个数,n个数各不相同
考虑meet in the middle ,得到如下形式

a1+a2<b21+2b1b2+b22

整理得到:
a1b21<a2b22+2b1b2

枚举 a1b1 ,就是一个这样的形式: x+ky>c
那么直接上kd-tree就好了
(mdzz这题这么好写我竟然没有去写

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值