CF1797E
设 \(f(x,y)\) 表示 \(x,y\) 要相同最大的变成多少。
由于 \(\varphi\) 最多只需要做 \(\log\) 次就可以到 \(1\),所以这是可以直接暴力的。
我们现在只需维护区间 \(f\) 的值,外加区间取 \(\varphi\)。
区间取 \(\varphi\) 暴力。使用”小清新“线段树,或者用并查集。
复杂度 \(O(n\log^2n)\)。
CF196C
观察题目发现一个点的每个子树的点的坐标都是需要不相交的。
我们可以给一个子树分配一些点,然后递归处理。
对于一个点的子树,假设已经分配了一些点了,我们先取出最左边最下的点做根。
然后剩下的点,我们按极角排序,依此分配给每个子树即可。
CF1200F
注意到 \(y\) 很大,不好设状态。注意到 \(m\) 只有 \(10\),所以我们直接把 \(y\) 对 \(lcm(1,2...,10)=2520\) 取模。
剩下状态数很小。
注意到过程是会一直进行下去的条件是出现环。我们可以记忆化搜索去处理,每个状态只会遍历一次。
CF294C
注意到每个灯之间的空隙都是独立的。
对于边界的空隙,方案数是 \(1\),否则如果长度是 \(s\),方案数是 \(2^{s-1}\)。
把方案数乘起来,然后再乘组合数即可。
CF793G
只需要典地把每行和每列看成二分图的两端去做匹配。
但是边数很多,可以考虑线段树优化建图去处理,考虑把图剖分成若干个矩形处理。
当然暴力的匈牙利加上“当前弧”优化可过,使用 bitset 优化空间。
CF838D
及其的神奇。首先把从前和从后进入都看成虚拟节点 \(n+1\),形成一个环。
那么每个人可以看做是从任意一个点开始走,顺时针或逆时针。
不合法的方案是 \(n+1\) 被占据了。由于每个点等价,所以 \(n+1\) 被占领的概率是 \(\frac{m}{n+1}\)。
那么总的答案就是 \(\frac{n+1-m}{n+1}(2n+2)^m\)。
CF258D
期望考虑拆贡献,我们直接维护 \(p_{i,j}\) 表示 \(a_i>a_j\) 的概率。
如果交换 \((x,y)\),那么 \(p_{x,y}=p_{y,x}=\frac{1}{2}\)。
对于其他的 \(t\neq x,y\),\(p_{x,t}=p_{y,t}=\frac{1}{2}(p_{x,t}+p_{y,t})\)。
\(p_{t,x}=p_{t,y}=1-p_{x,t}\)。
初始条件 \(p_{i,j}=[a_i>a_j]\)。