我好菜啊!

A

由于每个方格可以翻转或旋转,所以我们如果可以不考虑重合构造出一条无限长的链,就可以通过翻转来使它没有重合的问题(比如强制这条链的方向是向左上)。

然后设$f[i][j]$表示第$i$个方格,它和上一个方格相连的边是第$j$条,那么它就可以通过第$k(k \ne j)$条边和下一个方格相连。

这样我们对于每种转移连一条有向边,就构成了一张图,如果这张图有环,就说明可以有一条无限长的链。

如果直接建图边数是$O(n^2)$的,我们可以对于每一种边的符号建一个新点,向对应的状态连边,那么这样边数就变成$O(n)$的了。然后拓扑排序判环即可。

B

这题好神仙啊,我自己肯定是想不出来的。

首先,最优的策略一定是在赢了$a$元或输了$b$元之后停止,因为当前状态只和赢或亏的钱数有关,而和如何到达这个状态无关。

设$f(i)$表示从赢了$i$元到结束获得的期望钱数,则$f(a)=a$, $f(-b)=-b(1 - x)$, $f(i) = p f(i + 1) + (1 - p) f(i - 1)$。

可以发现$f(i)$是个线性递推,利用特征方程可以解得$f(i)$的通项,然后就可以$O(1)$求答案,答案就是$f(0)$的值。

设$g(u, v)$表示$a=u$,$b=v$时$f(0)$的值,则可以发现对于$u$和$v$,$g$都是单峰的,并且通过观察别人的代码我们发现随着$u$的增大,使$g(u, v)$最大的$v$是递增的。

然后我们信仰$u$和$v$不会很大,直接枚举$u$,然后将$v$增大至使$g(u, v)$最大的值即可。

C

只有距离相等的人有可能会冲突,我们只加入可能在最短路中的边,然后对所有距离相等的人跑网络流即可。

D

$f(x)$只会和$x$的所有质因子的出现次数有关,且$x$的所有质因子的出现次数不会超过$log$值域。直接暴搜整数拆分,然后由于我们想让$x$尽可能小,所以我们对于出现次数越多的数,分配越小的质数,然后$f(x)$的值用组合数计算。

由于直接计算组合数有可能会出现爆long long的情况,还有可能中间过程爆了,但答案没有爆。我们直接使用质因数分解来算组合数。这样就只有乘法了,结果爆了long long可以直接判断。

E

如果一个变量在$0$号bank里,我们一定会不使用BSR访问它,否则我们只能使用BSR访问它。

考虑到变量只有$13$个,我们暴枚哪些变量放在$0$号bank里,然后我们只要求出BSR的更改次数即可。

我们先求出一个数组$a[i][j]$表示无视所有在$0$号bank中的变量后,第$i$个变量在第$j$个变量前一次被访问的次数。那么我们将其他变量分成$b-1$组,代价是所有$a[i][j]$($i$和$j$不在同一组)之和。对于如何分组最优,我们使用状压求解即可。

F

把数组排个序,容易发现每一个机器的两组中的最小值一定会在数组中相邻。然后我们二分答案,直接贪心选择尽可能靠前的相邻的数作为某一个机器的最小值。如果一个数没有被选择,它一定会属于最小值已经被确定的某一个机器。那么记一下所有最小值已经被确定的机器还能容纳多少个数即可。

G

不会。。

H

无脑区间dp,如果合并了两个区间,那么代价为总元素个数减最小值较小的那个区间中比另一个区间的最小值小的元素个数(可能有点绕)。

I

枚举上边界,枚举下边界,然后把每一列看做一个点,点的深度为这一列在上下边界之间的所有点的深度的最小值。

然后枚举底面的深度(在矩阵中的区域中的最小值),那么底面面积越大越好,即左边界和右边界的距离要尽可能大。

用单调栈求出每个点左边和右边第一个比它大的数,就可以得到深度为这个点的深度的最大矩形。然后把这个矩阵和$a \times b$的大小限制取个$\min$,我们就得到了最大的底面面积。那么最高的高度显然是可以$O(1)$求的。

J

计算几何题,考虑到精度要求不高,写辛普森积分调调参就可以过了。

K

毒瘤码农题,先暴枚遍历的方式,然后状态是是否知道前、中、后序遍历,以及前、中、后序遍历所在的区间。然后记忆化一下即可。

由于太长了,我就不写了,口胡一下。。。