哈哈,我见过区
edu 191
B.
自己找出 \(n=2\) 的方案;\(n=3\) 的题目给了。对于 \(n\) 更大的情况拆成若干个 \(2/3\) 连续段合在一起就行。
C.
被卡了。
\(k=0\) 可以 \(O(n)\) 扫一遍维护一个栈来得到答案,但这个东西需要多维护一个变量:栈的大小,所以 dp 复杂度不太行。
如果删一个左括号一定删最左边的;删一个右括号一定删最右边的。所以枚举删 \(x\) 个左括号,然后 check 一次。就 \(O(nk)\) 了。
D.
随便找到一个 \(\max-\min+1 \neq cnt\) 的值 \(x\),那么 \(\min/\max\) 必定有一处被交换。不妨假设交换的是 \(\min\),那么由于 \(\max\) 不动,一定会把 \(\min\) 放到 \((\max-cnt,\max]\) 中的任意一个空位。所以可能的交换方案是 \(O(1)\) 级别的。
发现 wa 了,原来有一种特殊情况是可以放到 \(\max+1\) 的位置。
E.
被卡了。
如果 \(n=2^m-1\),很容易观察到这个排列咋排没区别。
现在多出一个最高位:猜想这个最高位是唯一确定的。于是去证明 \(pcnt(m)\) 比其他都小。
这个好像真的可以证明:对于任何一个第 \(m\) 位是 \(1\) 的我们把第 \(m\) 位设置成 \(0\) 然后第 \(m-1\) 位设置成 \(1\) 于是很容易知道 \(pcnt\) 是单调不降的。
要是能证明 \(pcnt(x)\gt pcnt(x+1)\) 可就好了!发现只在一些特殊情况下 \(pcnt(x)=pcnt(x+1)\) 然后这时候这两位好像没啥区别。于是这个题变成了先 sort 一下然后判断合法性最后每个内部轮换数乘一下。
F.
不妨 \(a\lt b\),如果 \(a=1\) 那么一定是在 \(b\) 的因数上不断转移。
然后容易联想到我们一次转移就是去掉一些质因子同时加上一些质因子:先把 \(a,b\) 除掉 \(\gcd\),然后拉出两者的所有因子设一个 \(dp(i,j)\) 即可。转移到一个 \(dp(x,y)\) 使得 \(x\mid i,j\mid y\),转移数好像是有保证的。
这个做法似乎会面临中间量 \(\gt n\) 的情况,但是看了一眼题解说能保证构造出不超过 \(b\) 的路径。
我应该会一个不超过 \(O(d^2\log)\) 的做法。

浙公网安备 33010602011771号