solution
- T1:
- 老套路,想一想把 x x x分成二进制,然后就可以在 O ( l o g x ) O(logx) O(logx)复杂度求出答案。
- 但是这样子做一定操作会超过50次,所以考虑不是二进制,而是某个 k k k进制。
- 这样子,我们需要先预处理出 [ 1 , k ] [1,k] [1,k]的数——实际上我们只要预处理 [ 1 , k / 2 ] [1,k/2] [1,k/2]和 k k k,因为有减法。
- T4:
- 首先把曼哈顿距离转化成切比雪夫距离,这样 x x x轴和 y y y轴坐标就独立了。
- 转化成一维问题以后,发现可以再次转化成那个经典的卡特兰数的向上向右走问题,只不过是有正负两个限制,容斥一下就好了。
- T9:
- 显然可以把每一种颜色分开考虑,然后建立二分图模型,对于 ( x , y ) (x,y) (x,y)表示从左边的 x x x号点向右边的 y y y号点连边。
- 这样就是经典的二分图边染色问题,颜色数量是度数最大点的度数。
- 但题目要求要构造一种方案,有两种方法:
- 第一种方法:考虑一不做二不休,干脆直接做多次最大匹配,每一次匹配的边染同一种颜色。
- 第二种方法:对于一条边能染色就染色,不能染色就想二分图匹配一样寻找增广路,考虑如果对于一条边 ( x , y ) (x,y) (x,y), x x x可以染颜色 c 1 c1 c1而 y y y可以染颜色 c 2 c2 c2,那么我们可以把当前边染成 c 1 c1 c1,但这样子 y y y就有两条染成 c 1 c1 c1的边了,我们把另一个 c 1 c1 c1边的端点 z z z找出来,让 ( z , y ) (z,y) (z,y)染成 c 2 c2 c2,假如合法的话就结束,不合法就继续。