DAY1
P1.魔卡少女
抽象题意:动态维护一个区间内,所有的连续子串异或值和。
方法:很显然,我们可以想到用线段树来做,
于是我就花掉了整一场比赛的时间去搞这题
我们先开10*2+1+1棵线段数
(ai<=1000)
,每棵线段树所代表的线段数区间X的
所有前缀异或值的二进制的第i位分别为0和1的个数:bl[X][i][0,1],
以及所有后缀异或值的二进制的第i位分别为0和1的个数:br[X][i][0,1],
和当前区间所有数的异或值:B[X],,
和当前区间内的所有子串的异或值的和:b[X]。
假设我们已经得出了2个连续的线段数区间l和r,现在,我们把它们合并成一个大的区间q,很显然:
b[q]=b[l]+b[r]+跨越两个小区间的子串异或和
那 跨越两个小区间的子串异或和 怎么算哪?
很显然,跨越两个小区间的子串异或和=
(br[l][i][0]∗bl[r][i][1]+br[l][i][1]∗bl[r][i][0])∗2i
转移bl和br时注意一下即可。
PS:可能需要卡常数
优化:
易证,已知当前区间的元素个数和前(后)缀的0(1)的个数,可以直接算出1(0)的个数,这样可以减小常数
T2.不稳定的传送门
抽象题意:给出概率和花费,求最优花费期望值
这题有一个奇怪的贪心,
设f[i]为终点到当前点的距离
那我们就要求在最优的顺序下(不同的顺序下期望值会不同)到达当前点的最小期望值,
又长又臭,不想打,上连接
T3.宝藏
抽象题意:给出依赖关系,求最小的∑ai/∑bi
先科普下01分数规划
但是这题有一个奇怪的依赖关系,于是
栋爷说得对:这些奇怪的依赖关系的题,很多都是用网络流做
我们知道,之所以要花上这么的力气去开很多门,就是为了打开依赖门,得到更优的方案,
So,依赖点向被依赖点连一条边,
一个点,如果它在01分数规划中的值为正数,那么它可以流过的量就为这个值并向S连一条边;如为负数,那么它可以流过的量就为(-这个值)并向T连一条边,
因为如果它的值大于0,那么它对答案有贡献,反之会拖累答案,
然后跑一遍网络流,
因为网络流是跑不出负数的,所以当跑出来的最小割结果为0,那么答案就要往上升,反之就要下降,(自己YY一下就可证明)
T4.地图
抽象题意:给出一个不完整的地图和几个必须联通的块,求合法的方案数
正解为插头DP,一脸懵逼。
DAY 2
T1 染色大战
抽象题意:有两个人互相博弈,求两人的得分差
标准博弈论,加点小优化即可。
T2 QT与泰剧
抽象题意:求S-T中,为3的倍数并每位不全是质数的数有多少
标准数位DP,注意细节即可。
T3 项链
抽象题意:给出个环,求去除一段后的最大对称环的长度
把原串在后面复制一份后搞一下manachar,
因为所谓的对称串就是两个回文的串组成的,但长度一定要小于n(有大神当场用脚趾头想了一个反例)
设:j,i(j< i) 我们现在需要的是求满足(i-j<=n && j+f[j]>=i-f[i])下的j的最小值
我们用线段树维护区间的i+f[i]最大值,这样我们就可以知道此区间是否有值合法,就可以继续往下找
T4 小学生数学题
抽象题意:求 ∑ni=11i 在模 pk 下的答案