从题目中给出的 “相似” 定义,我们发现实际上要求的是
A
,
B
A,B
A,B 的数目相同,而不管排列顺序
对于操作,发现 “相邻” 这个字眼貌似是要考虑顺序,但细想:一个字符串中只要有 A A A 有 B B B,就必然至少有一个位置的 A , B A,B A,B 是相邻的
那么现在就确定只与数量有关了。暴力枚举可以拿到 35 pts
现在每个串相当于转化成了一个二元组 ( A , B ) (A,B) (A,B),类比我们在处理区间问题时有时会将二维信息 [ l , r ] [l,r] [l,r] 看做平面中的点 的技巧,这里我们也这么做
观察到 最大的最小,考虑二分 k k k 表示某个串 T T T 修改 k k k 次,希望可以成为每一个 S S S 串
把四个操作翻译一下,实际上是:假设当前在 ( x , y ) (x,y) (x,y),在坐标系中可以走到 ( x + 1 , y + 1 ) , ( x − 1 , y − 1 ) , ( x + 1 , y ) , ( x − 1 , y ) , ( x , y + 1 ) , ( x , y − 1 ) (x+1,y+1),(x-1,y-1),(x+1,y),(x-1,y),(x,y+1),(x,y-1) (x+1,y+1),(x−1,y−1),(x+1,y),(x−1,y),(x,y+1),(x,y−1)
考虑 k k k 次以内,怎样的点 ( T T T 串) 可以到达 s s s
是一个这样的图形,那么我们的目的是找一个 能够到达所有
s
s
s 的串
T
T
T,即 所有图形的交
横平竖直的图形,用线性规划解决,对于一个串 ( x i , y i ) (x_i,y_i) (xi,yi),可以列出以下式子: x i − k ≤ x ≤ x i + k x_i-k\leq x\leq x_i+k xi−k≤x≤xi+k y i − k ≤ y ≤ y i + k y_i-k\leq y\leq y_i+k yi−k≤y≤yi+k y i − x i − k ≤ y − x ≤ y i − x i + k y_i-x_i-k\leq y-x\leq y_i-x_i+k yi−xi−k≤y−x≤yi−xi+k
对所有的 n n n 组不等式取交,分别得到 x , y , y − x x,y,y-x x,y,y−x 的范围
若三个解集有一个为空,则无解
否则,设 l x ≤ x ≤ r x , l y ≤ y ≤ r y , l d ≤ y − x ≤ r d lx\leq x\leq rx,ly\leq y\leq ry,ld\leq y-x\leq rd lx≤x≤rx,ly≤y≤ry,ld≤y−x≤rd,那么由前两个式子作差得到 l y − r x ≤ y − x ≤ r y − l x ly-rx\leq y-x \leq ry-lx ly−rx≤y−x≤ry−lx
注意这样直接作差实际上会使
y
−
x
y-x
y−x 范围扩大,如上图求出的实际上是 黑色斜线之间的区域
但是,由于斜率相同,若蓝色区域与黑色区域有交,显然也必定与矩形区域有交
所以直接求二者的交集,看是否为空来判断即可
有一个小细节是 l x , l y lx,ly lx,ly 的初值应该为 0 0 0,不能有负数;还需要 r x , r y rx,ry rx,ry 不同时为零
下面考虑如何构造答案
尽可能的把答案取到右上边界的位置,发现要么有 x = r x x=rx x=rx ,要么有 y = r y y=ry y=ry ,
那么只需令
A
=
m
i
n
(
r
x
,
r
y
−
l
d
)
,
B
=
m
i
n
(
r
y
,
r
x
+
r
d
)
A=min(rx,ry-ld),B=min(ry,rx+rd)
A=min(rx,ry−ld),B=min(ry,rx+rd) 即可,易证这样能够使得
A
,
B
A,B
A,B 不同时为
0
0
0