2016 Multi-University Training Contest 6 solutions BY UESTC
A Boring Question
A Simple Chess
这是一道容斥+Lucas定理的水题。
tips:终点可能有障碍物
A Simple Nim
sg[0]=0
当x=8k+7时sg[x]=8k+8,
当x=8k+8时sg[x]=8k+7,
其余时候sg[x]=x;(k>=0)
打表找规律可得,数学归纳法可证。
Magic Number
对于bi来说,二进制的第i位一定为1,大于i位一定是0。将二进制的每一位看作一个结点构成一棵树,使得结点i到根的路径上的所有结点编号表示bi二进制中为1的位置。已知b1到bi-1所构成的树,新增加一个结点bi,只需要求构成bi的所有bj的最近公共祖先,将结点i放到该祖先的儿子的位置。对于询问ci,只需要求构成di的所有bj的到根路径的并,答案为路径并的结点数。
Master Zhu
考虑一个朴素的解法:2^n枚举在哪些行放置棋子,并判断是否可以通过这些棋子填充其它的列。由于区间的边界非递减,那么处理出要放的列,每次贪心地放置编号最小的需要放的列必然是最优的。
那么考虑一个dp的做法:dp1[i][j][k]表示现在做了前i行且有一些行没填,需要把jk列都放置棋子才能把前i行的所有格子满足条件,dp2[i][j]表示填了前i行且有一些行没填,但是所有格子都已经满足条件,且之后只需要填第j列之后的列,dp3[i][j][k]表示填了前i行,且下一个没填的行是第k行,现在填了L[k]j列(j = L[K] - 1表示一列都没有填)。
考虑dp1的转移,对于第i行,只要枚举左边界不小于L(i+1)且右边界不大于R(i+1)的列区间没填,因为若左边界小于L(i+1),那么这些列以后无论怎么样都无法被填充。然后分情况讨论转移到i+1的即可。
考虑dp2的转移,枚举下一个没填的行k,并分情况转移到相应的dp2[k][R[k]]和dp3[i][k][max(j,L[k] - 1)]
考虑dp3的转移,也是分情况讨论转移,具体实现看标程。时间复杂度O(N*(2NM + M^2))
Stabilization
考虑去掉abs符号,发现只有相邻两个数的最高位被影响了才会影响abs的符号,所以可以按照最高位不一样的位置分类,之后考虑朴素枚举x从0到2^20,每次的复杂度是O(400),无法通过,考虑优化,第一种方法是用DFS来进行枚举,第二种则是加入记忆化
This world need more Zhu
卿学姐说她的fans都能过这个题
考虑链上的操作,我们用树上莫队来处理,因为很容易做到O(1)转移到相邻节点的状态。
考虑子树操作,可以启发式合并来维护答案,也可以先dfs序一下,然后再跑普通的莫队算法就好了。
To My Girlfriend
令dp[i][j][s1][s2]表示前i个物品填了j的体积,有s1个物品选为为必选,s2个物品选为必不选的方案数(0<=s1,s2<=2),则有转移方程dp[i][j][s1][s2] = dp[i - 1][j][s1][s2] + dp[i - 1][j - a[i]][s1 - 1][s2] + dp[i - 1][j][s1][s2 - 1],边界条件为dp[0][0][0][0] = 1,时间复杂度O(NS*3^2)。
Up Sky,Mr.Zhu
我们把所有长度相同的回文串插入到同一个可持久化字典树里面
然后
在线查询[L,R] 特征串为T 长度为1 的回文串的数量
在线查询[L+1,R] 特征串为T 长度为2 的回文串的数量
在线查询[L+2,R] 特征串为T 长度为3 的回文串的数量
......
在线查询[L+9,R] 特征串为T 长度为10 的回文串的数量
Windows 10
您可能是正版Windows 10的受害者
直接贪心就好
比较直观的看法是使劲往下降,然后升回来
或者使劲往下降然后停顿然后再使劲往下降。。。
于是就能将问题变成一个子问题,然后dfs就好
需要注意的是由于按up键也可以打断连续向下的功效
所以应该记录停顿了几次,以后向上的时候用停顿补回来
Zhu’s Math Problem
方法1 :暴力小数据,暴力解方程,即假设答案是关于A,B,C,D的小于等于k次的多项式方程,然后解即可
方法2 :分类讨论,比较烦
方法3 :考虑数位DP,从高位到低位依次放数字即可,加上状态表示a+c-b-d,a+d-b-c即可
ps:如果对本场题目质量有什么意见,请猛戳这个传送门,欢迎大家前来吐槽