构造题。
x = 1 , 2 N − 1 x=1,2N-1 x=1,2N−1必然无解。
否则把 x x x放中间, x − 1 , x + 1 x-1,x+1 x−1,x+1放左右,一定有解。
线性的期望可以拆开逐次算:
单独考虑每次操作:
跳跃后 a j a_j aj的期望位置: a j + 1 + a j − 1 − a j a_{j+1}+a_{j-1}-a_j aj+1+aj−1−aj,发现:
a j + 1 − a j ′ = a j − a j − 1 , a j ′ − a j − 1 = a j + 1 − a j a_{j+1}-a_j'=a_j-a_{j-1},a_{j}'-a_{j-1}=a_{j+1}-a_{j} aj+1−aj′=aj−aj−1,aj′−aj−1=aj+1−aj
原数列差分得到 b j = a j + 1 − a j b_j=a_{j+1}-a_{j} bj=aj+1−aj, a j a_j aj的一次跳跃相当于 s w a p ( b j , b j − 1 ) swap(b_j,b_{j-1}) swap(bj,bj−1)
那么执行一次 s e t set set后相当于对 b b b进行了一次轮换。
求出所有轮换组。轮换组里找 M M M次轮换后的位置是 O ( 1 ) O(1) O(1)的。
二分答案,将 < m i d <mid <mid的数看作 0 0 0, ≥ m i d \geq mid ≥mid的数看作 1 1 1。
考虑从中间位置不断向两端拓展,若先遇到连续的2个0/1,则最后顶端必然为0/1,否则比较01的个数即可。
一些性质:
发现可以构造操作(记大写字母与小写字母为两种正反状态):
(懒于构造,直接贴题解)
2操作也就是说交换相邻两个奇偶性相同的列且保持正反状态不变时,必然会使得一个奇偶性不同的列正反状态改变。
那么模拟冒泡排序的过程(BIT维护),计算奇数列和偶数列是否能达到目标矩阵的正反状态。
(只需要反的列个数与目标矩阵反的列个数差为偶,因为可以通过1操作达到目标状态)
把格点 ( x , y ) (x,y) (x,y)看做点 x → x\to x→点 y y y的一条有向边。
则原图的染色相当于由 x → y , y → z x\to y,y\to z x→y,y→z得到 z → x z\to x z→x。
发现只有每个弱连通图内的点可能会增加连边。
所以先把边看成无向的,在划分出的每个弱连通图内计算贡献:
基于对图论题目本质的理解,题解中套用一个很妙的方案——三染色:使得红点连向黄点,黄点连向蓝点,蓝点连向红点。
若无法染色,显然图会被连成完全图,贡献为 n 2 n^2 n2。
若只能染出 ≤ 2 \leq 2 ≤2种颜色,则不会有新连边,贡献为 m m m。
否则设三种颜色点数分别为 c 1 , c 2 , c 3 c_1,c_2,c_3 c1,c2,c3,相应颜色之间的点均可以连边,贡献为 c 1 c 2 + c 2 c 3 + c 3 c 1 c_1c_2+c_2c_3+c_3c_1 c1c2+c2c3+c3c1