CF1622F
设 \(n=2k\),可以得到
所以要考虑的本质上是 \(2^{\lfloor\frac{n}2\rfloor}(\lfloor\frac{n}2\rfloor)!\),直接判定这两者是不是完全平方数并哪项不是删掉即可
对于 \(n=2k+1\) 的情况,最多也只会删掉 \(n!,2!,(\lfloor\frac{n}2\rfloor)!\) 三项,那么先判定序列是不是能删掉 \(0/1/2\) 项来做到合法,否则直接给出构造
考虑给每个质因子一个随机权值,那么合数的权值就是其所有出现次数为奇数的质因子权值异或和,判定是不是存在一个 \(x!\) 的权值是 \(n!\) 以及是不是存在一个 \(x!\) 的权值是 \(n!\ \oplus\ y!\ (y\in [1,n])\) 即可
设随机向量长度为 \(B\) 时,一个不是完全平方数的数字被异或成了完全平方数的概率是 \(\left(\frac{1}2\right)^B\),本质上是 \(\sum\limits_{x\in\{even\}}\binom{n}x=\sum\limits_{x\in\{odd\}}\binom{n}x\),其中 \(n\) 是某个数字中出现奇数次质因子的数量
在 \(|S|=n-2\) 时 \(\frac{n!}{y!}=x!\) 中 \((x,y)\) 有 \(n^2\) 种,那么正确率就是 \(\left(1-\frac{1}{2^B}\right)^{n^2}\),在 \(B=64\) 而非 \(32\) 时才可以得到较高正确率
Luogu4240
原式进行简单的和式变换就可以得到:
其中 \(F(n,m)=\sum\limits_{i=1}^m\varphi(in)\)
处理 \(F(n,m)\) 能做到 \(\Theta(Qn)\) 复杂度,但是其实 \(i\) 比较大的时候要求的东西在每个询问中都是差不多的,所以预处理 \(x\in[1,B],y\in[1,B]\) 的所有 \(F(n,x),F(n,y)\) 的乘积并前缀和,每次询问对于 \(i\le \left \lfloor\frac nB\right \rfloor\) 的部分暴力,剩下的整除分块即可
ARC104E
由于 \(n\) 实在是太小了,枚举其全排列,对于 \(p_i>p_{i+1}\) 那么限制是 \(a_{p_i}\ge a_{p_{i+1}}\),否则严格大于
这时候每个位置的选值集合就是本身上界减去前面严格大于的数字,同时还要做后缀 \(\min\)
现在限制变成了大于等于,可以使用格路计数的容斥来做,设上界分别是 \(a_1\sim a_n\),\(f_i\) 表示走到了横坐标为 \(i\) 的列的方案数(不限制纵坐标),转移就是枚举第一次超出界限的位置即可
显然要暴力算组合数,因为 \(n\) 实在是太小了
CF718E
不难观察到图的直径不超过 \(15\),预处理 \(f_{i,c},g_{c_1,c_2}\) 分别表示 \(i\) 到颜色 \(c\) 最近的距离和颜色为 \(c_1\) 某点到颜色为 \(c_2\) 某点的最短路
不难发现一对 \((i,j)[i<j]\) 的最短路就是 \(\min\limits_{c}\left\{f_{i,c}+f_{j,c}+1,j-i\right\}\)
对于 \(j-i\le 15\) 的情况,选择的中转颜色的点可能是同一个,再 \(+1\) 可能产生错误,那么直接冲暴力
否则观察到 \(f_{i,c}=g_{col_i,c}/g_{col_i,c}+1\)
否则枚举 \(j\) 考虑小于之并且距离之至少为 \(16\) 的所有 \(i\),使用二进制状压他们的 \(f_{i,c}-g_{col_i,c}\),这些 \(i\) 的另外一个属性是他们的颜色
对于两个属性都相同的 \(i\) 到 \(j\) 是相同的,计算即可
CF997E
扫描线,一个区间是好区间的条件是 \(\max-\min-(r-l)=0\),使用两个单调栈分别维护最小/最大值,区间加增量即可
要求的是历史权值之和,使用一个全局加权值的操作实现
由于 \(i\) 处是 \(0\) 致使全局最小值也是 \(0\),那么 “加权值” 的判定就是子区间最小值是大区间最小值
一开始并没有注意到加权值的判定条件,那么写了个暴力过掉了所有 Codeforces 数据,不得不震惊
Luogu7515
先给 \(A_{i,j}\) 任意赋值使得和满足条件,但是不一定在限制的值域之内
定义一种操作 \(\pm\) 表示给行/列上奇数点加 \(1\),偶数点减一,另一种 \(\mp\) 表示给奇数点减,偶数点加,通过上面的操作不会改变 \(2\times 2\) 的正方形的权值和
设 \(i\) 行上操作进行 \(c_i\) 次,\(j\) 列上 \(d_j\) 次
我们给奇数行/偶数列做 \(\mp\) ,偶数行/奇数列做 \(\pm\),这样子满足了每个 \(2\times 2\) 的小矩形都是和不变的
那么限制这时候变成了 \(0\le A_{i,j}\pm c_i\mp d_j\) 的形式,使用 ckmax
式差分约束可以在 \(\Theta(n^3)\) 复杂度里面实现
UOJ 数据很猛,所以还是要把正环长度缩小再跑(正环长度不超过 \(50\) 就离谱)
Luogu7516
对于一个给定的图 \(G\) 如果 \(i\) 在正图和反图上都能经过不小于 \(i\) 的点到达 \(\ge i\) 的点 \(j\),那么 \(i\) 会对 \(f(j,G)\) 造成贡献
使用 \(\rm Floyd\) 来算上面的东西,边权变成了每条边现在的标号,目的就是最大化 \(\rm arg\min\)
注意根据实际含义是要倒序枚举中转点的,这时候 \(f_{i,j}(i<j)\) 是正图可达,\(f(j,i)\) 是反图可达
Luogu7520
定义点 \(x\) 在有向图上的受支配集为题目说的点集去掉 \(x\),一个点在支配树上的父亲是它受支配集中受支配集最大的一个
不难先暴力算受支配集,再使用拓扑排序状物来求支配树
每个点的受支配集变化有 其支配树上父亲受支配集变化 和 存在绕过父亲到达之的路径 两种形式
注意不存在一个点满足 “在原图的受支配集里面所有点的受支配集不变的情况下,产生了路径满足经过父亲但是绕过受支配集中其它一个点到达之”(证明是容易的)
那么只需要对每个点判定是不是产生了绕过 \(fa_x\) 的路径即可
求出来 \(acc_1[x][y]\) 表示 \(x\) 禁止经过后 \(y\) 是不是从 \(1\) 可达以及 \(acc_2[x][y]\) 表示 \(fa_x\) 禁止经过后 \(y\) 是不是从 \(x\) 可达即可