自己看看了半天都找不到规律,倒是感觉和逆序数应该有关系,但是直接按照偶序列有解奇序列无解来算wa,因为按照我原来的理解是,偶序列4个反转一定还是偶序列,奇序列4个反转也一定是奇序列。搜了题解之后发现漏掉了一个条件,那就是这个是个环,所以他从任意一个地方开始都可以,这就相当于在原来的4个翻转的变换的基础上多了一种变换:把后面的一段整个的移动到前面的一段。这个操作是如果按照一次简单变换来衡量的话,相当于做了i*j次变换,其中i是分界点前一段的个数,j是后一段的。当n为偶数的时候可以找到一个分界点分为两个奇数段,则相乘之后仍然是奇数,等于说这时候是可以从奇序列变成偶序列的;而当n为奇数的时候,i和j必定一奇一偶,这时候相乘必定为偶数,无法变换序列的奇偶性。所以,只有当序列为奇序列且n为奇数的时候才无解,其他情况均有解,因为均可以变换为偶序列。
[CF][区间标记方法][暴力] codeforces 1028C Rectangles
比赛时候wa到哭,后来发现优化错了,把优化去掉玄学AC(这可是三个for啊这复杂度)
后来想一下,之所以能玄学过,就是因为题目保证了一定有解,如果无解的话那三个for还真有可能跑一遍,不说三个了两个跑一遍都够呛。。
我这里的玄学算法就是,对横纵坐标分别标记,当一个点在纵方向上被至少n-1个举行覆盖的时候才考虑这个横坐标,然后在这个横坐标上的所有纵坐标,也只有当被至少n-1个覆盖到的时候才考虑它,当然这只是必要条件而不是充分条件,然后对于一个要考虑的点遍历所有矩形(没错就是这么暴力)如果有超过1个没覆盖到这个点就退出直接不考虑。。。就这么超级暴力+剪枝,玄学过了cf的所有数据,emmm 继续阅读“[CF][区间标记方法][暴力] codeforces 1028C Rectangles”
位运算快速枚举用二进制表示的集合的所有子集(来自训练指南
大概就是做训练指南遇到了一个压缩dp题然后需要用到把二进制表示的这种集合的所有子集很快的枚举出来(⊙﹏⊙)
当然据聚聚说这只是常规操作所以可能是我太蠢了之前没有遇到过emm