arc189
A:
类似一个合并块的东西,一开始有n个块,我们的操作只能合并距离为1的两个块。然后最终状态我们是知道的,然后要特判一下,如果最终开头为0,那么肯定是不行的。最终的肯定是隔离开的。[l1,r1],[l2,r2],然后操作只在这个区间之内,那么我们就可以先判断两端是否符合条件,然后直接输出,然后最后再组合数搞一下。也就是长度为0101010101怎么变成0000000,然后有好多长度要求。考虑dp。设dp[i]为0101010变成00000的方案数。最后一步必然是将一段连续的1111消完,不妨枚举这个,那就是dp[i]=dp[l]dp[r]dp[r-l-1]其中这个奇偶有关系吗,所有都为奇,不是奇没答案的。我们再搞一下,变成dp[i]=dp[l]dp[r]dp[r-l-1],然后和奇偶无关。
\sum_{l=1}^{n} \sum_{r=l+2}^{n} dp[l]dp[r]dp[r-l+1]
这怎么优化啊?这个好烦啊!
我们发现操作序列长度为里面1的个数,我们的操作序列,操作数不就是个阶乘吗?哦,我们一下会连两个。那么我们将一个1消掉。一个序列1的个数是长度/2,唉
我们连一下就会变成长度-2的情况,所以f[i]=f[i-2]*(i-2),小丑了。
这是*1400?差不多吧,感觉和noipt2类似
B:
怎样能减少答案,只要M靠近xi+1即可,我们发现这有点像平移的过程,一个M可以让它平移。如果都在M右边,那么就平移xi+1-m+xi+2-m,如果一左一右那也一样,所以我们就是有各种m,可以给这两个东西平移xi+1+xi+2-2m的距离。发现2m=xi+xi+3,那么就是选xi+1+xi+2>=xi+xi+3的,这样就是有可能优化答案的。我们想看看最后的这个东西长什么样,如果
最后每个i都不符合条件了,答案还可能有优化吗,应该是不能了,所以我们知道了终止条件。那么我们的两个点之间的间隔就是单调不减的,这个应该排掉最后一个间隔,额,可能不太对。好,通过简单模拟我们知道了.A.B.C.可以优化的条件是C>A。所以我们从后往前做,然后就是符合条件交换AC,也就是C < A,能否保证这个最优。所以我们从后往前。看C和A,我们会把小的换到前面,这样一定是最优的。但是我们发现并没有改变什么东西。c。
看了一眼标签,差分。我们使用差分。哦,其实我们就是将我们的差分数组排序。也就是i和i+2的位置互换。发现奇偶性相同,所以我们直接排序即可。唉,差一点,这个奇偶没想到啊。注意差分数组的第一个不能被记入答案。
C:
转化为给两颗基环树森林。我们要挑一个点不执行,哦,但是有可能有的点没有球,这有点难搞。先思考所有点都有数的情况。也不考虑最少了,这个感觉很简单。首先枝叶先打上标记,这些事一定要先操作的。不然就等会操作也没有什么效果。然后就是要这两个环一样吗?哦,我们有一个点没有操作,这个就相当一颗树,选择一个作为根节点。然后就是要从下往上。不行的当且仅当没有一个节点同时在环上。如果有多个值不为0的连通块,那么无解。必须为两个在环上的点,这样所有数才能传到。那么我们比较优的方案就是先操作完第一颗树再操作第二棵树或者反一下,这样是对的,因为操作完一棵树之后不会改变了。那会不会有更优的方案呢,我猜不会。首先一棵树的答案为n-1减去从下往上联通块大小为0的。那这样是n^2的。然后就没什么前途。
题解就是把环搞出来,然后就是环上的最长公共子序列,那答案就是n1+n2-2-这个东西
我草里赖赖,md,然后继续我的做法,这个相当于一个最长公共子序列的东西,wc这tm是个排列,这就是个环,然后就做完了,这题算我独立做出来的吧。
D:
一个简单的东西,就是n^2做法,也就是选左右更小的,然后吸收。写下式子
我们设dp[i][x]为做到i时大小为x再往左吞噬,最多能到哪里,这个好求,对应着前缀和然后减一下。哦,这个是差分数组的最大值,i能走到j的条件是大于等于中间差分数组的最大值。但是我们可以往左。或者还有另外一个贪心,就是尽量往左边,然后往右边,这个时间会超吗。wc,这个发现每次不行,又行的时候,我们会增大一倍,所以这样的操作至多执行log 1e18 次,5秒,神了。然后考虑怎么拓展,我们貌似看错题了。我们只要保证sum(l,i)+w>a[i+1],然后二分答案,sum拆掉,那就是(sum[i]-sum[l-1]+w)>a[i+1]
sum[l-1] < sum[i]-a[i+1]
然后就是最大值即可
有点乱,w+sum(i+1,l-1)>a[l]保证这个东西
w-sum[i+1]>a[l]-sum[l-1]
w+sum(l+1,i-1)>a[l]
w+sum[i-1]>a[l]+sum[l+1]

浙公网安备 33010602011771号