A
一个 \(n\times m\) 的矩形已经给出了 \(k\) 个位置的数,判断是否有方案使得填入非负整数后,每一个 \(2\times 2\) 的子矩形都满足左上+右下=左下+右上。\(n,m,k\le 1e5\)。
注意到,矩形合法的条件可以转化为对于任意相邻的两列,在每行中,这两列值的差都相同。
也就是对于所有行的每个值都可以通过偏移一定量而来。考虑带权并查集维护。
对于非负整数这个条件,每个连通块求出最小值,然后用已有的值去判断。
B
一行有若干个格子,某些格子里有骨头,某些格子里有狗。你要给所有狗定向,定向后狗就会朝这个方向一直走。问骨头最多遇到多少个;遇到这么多个的最小时间。\(n\le 1e6\)。
考虑二分答案。一个狗相当于覆盖一个区间的骨头,要么往左要么往右。
然后考虑 dp,设 \(dp_{i}\) 表示前 \(i\) 个狗可以在 \(mid\) 时间里遇到到哪个前缀的骨头。
考虑转移,若当前狗考虑往左走那么其覆盖的区间里的狗都可以往右走,取最右的狗也就是上一个狗。
条件是 \(dp_{i-2}\) 需要覆盖到这个区间前的所有骨头。
若当前狗考虑往右走,那么条件是 \(dp_{i-1}\) 覆盖到这个区间前的所有骨头。
特判只有一条狗。
C
给定 \(n\) 个长度为 \(m\) 的字符串,你构造一个字符串使得对于每个串与这个串不同的位置不超过 \(d\)。
\(n\le 1000,m\le 5e4,d\le 6\)。
考虑定一个串为基准串,然后在这个串上修改不超过 \(d\) 次。
考虑搜索,考虑取一个与当前串不同位置超过 \(d\) 的串出来,然后枚举改的是哪一个位置。
设当前已经改了 \(x\) 个位,那么如果还存在不同位置个数 \(>2d-x\) 的可以直接返回。
D
给定一个无向图,考虑给无向图染色,使得相邻的顶点颜色不同,有 \(k\) 种颜色。
设邻居编号都比其大的节点为微型节点;邻居编号都比其小的节点为巨型节点。
图满足对于所有微型节点到矩形节点的路径长度都不整除 \(k\),路径满足必须从编号小的点到大的点。
给边定向从小的连到大的。那么微型节点就是没有入度,巨型节点就是没有出度。
考虑从小到大定色,只需要定最小的都所有入度点不同的颜色即可。
原因是这样定每个点的颜色都相当于某个微型节点到这个点的距离取模 \(k\),
假设存在一个点入度覆盖了所有 \(1\sim k\),那么其到巨型节点的距离肯定存在一个整除 \(k\),违背条件。