Round 959
A
给定 \(n*m\) 数组 \(a\),$ 1\le a_i\le n*m$ 并且两两不同,问是否存在数组 \(b\),也使用这些元素,并且每个位置的值都与 \(a\) 不同。
\(1*1\) 数组特判,其他循环移位。
B
给定01串s和t,可以对s任意次执行以下操作:选择l, r,将l,r异或等长前缀,问s和t是否能相等
对于s和t第一个不同的位置,看是否在这及这个位置之前出现过1,出现就可以随便修改,因为0不会影响异或结果,可以一直用这单独的出现1去操作s字符串
C
给定一个数组和一个值x,问有多少个区间满足:起始为0,从l,r每过一个位置加上这个值,若加上这个值后大于x就归0,最后结果不为0的区间。
前缀和处理,从后往前dp,找到每一个位置比他大x值的位置,这个点的dp值就等于那个点的dp值加一。最后用所有可能减去所有dp值即可。(dp值其实就是以这个点为左端点不能选的右端点)
D
给定一个数组a,长度为n,进行 \(n-1\) 次操作,对于第x次操作,可以选择 \(|a_u-a_v|\) 整除x的两个点建边,问最后能否建为连通图
对于第x次操作,一定有x+1个块需要连接,考虑对x取余值相等的两个点可以建边,根据鸽巢原理,x+1个块放到x个余数里,一定会有两个数相等,所以x从大到小倒序建边,之后反转输出即可。
E
给定n颗有根树,每次可以删除一个树的一个子树,并将结果或上删去的点数,问结果最大为多少。
首先对于任意个树进行或运算,都不会大于这些数的和。并且对于每颗数,我们可以一直只删一个节点来获得自己所需要的值。所以贪心的考虑对于n个树的大小,从高到低每一位进行判断,这一位为1且答案这一位为0就或上这个树,答案这一位为0,就把所有更低位或上1,就能获得最大值。
标签:对于,位置,Codeforces,给定,数组,操作,dp From: https://www.cnblogs.com/rxzfn/p/18314368