题意:
给定:
求区间\([l,r]\),使得:
任意给出一种方案.
题解:
定义\(dist(s,t)=s\)和\(t\)字符不相同的位置个数.
记第\(i\)个操作为\(p_i\),那么就是要最小化\(dist(p_r\cdots p_ls,t)\).
注意到\(dist(s,t)=dist(ps,pt)\),以及\(p_i^2=1\),于是
如果记\(s_i=p_1\cdots p_is,t_i=p_1\cdots p_it\),就相当于要求\(l,r\)使得在\(r-l+1\ge m\)的条件下\(dist(s_{l-1},t_{r})\)最小.
计算所有\(s_i,t_i\)的复杂度是\(O(nk)\).
构建无向图\(G=\{V,E\},V=\{0,\cdots,2^k-1\},E=\{(u,v):u\)和\(v\)二进制有一位不相同\(\}\).
枚举\(i\)从\(0\)到\(n-m\),进行如下操作:每次标记顶点\(s_i\),求\(t_{i+m}\)到图中已标记点最短距离.
每次以\(s_i\)为起点做BFS,由于每个顶点最短距离只会被更新\(O(k)\)次,因此复杂度不超过\(O(k^22^k)\)(仅为粗略估计,也有可能是\(O(k2^k)\)).
因此总的复杂度为\(O(nk+k^22^k)\),空间复杂度为\(O(nk+2^k)\).
代码
原文:https://www.cnblogs.com/Heltion/p/13516957.html