zoukankan      html  css  js  c++  java
  • 1392 G. Omkar and Pies

    题意:
    给定:

    1. 长度为(k(1le kle20))的字符串(s)(t);
    2. (n)个操作({(a_i,b_i)}_{i=1}^n(1le a_i,b_ile k)),第(i)个操作表示交换第(a_i)个字符和第(b_i)个字符;
    3. 常数(m(1le mle n)).

    求区间([l,r]),使得:

    1. (1le lle rle n,r-l+1ge m);
    2. (s)依次进行((a_l,a_l),cdots,(a_r,b_r))的操作后,(s)(t)字符相同的位置个数尽可能多.

    任意给出一种方案.

    题解:
    定义(dist(s,t)=s)(t)字符不相同的位置个数.
    记第(i)个操作为(p_i),那么就是要最小化(dist(p_rcdots p_ls,t)).
    注意到(dist(s,t)=dist(ps,pt)),以及(p_i^2=1),于是

    [dist(p_rcdots p_ls,t) \=dist(p_lcdots p_rp_rcdots p_ls,p_lcdots p_rt) \=dist(s,p_lcdots p_rt) \=dist(p_1cdots p_{l-1}s,p_1cdots p_rt).]

    如果记(s_i=p_1cdots p_is,t_i=p_1cdots p_it),就相当于要求(l,r)使得在(r-l+1ge 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)).
    代码

  • 相关阅读:
    常用256安全色
    PHP获取中英文混合字符串的字数
    windows 2012 443端口无法访问解决随记!
    SQL提取时间段内数据
    正则表达式匹配
    PclZip library能够压缩与解压缩Zip格式
    安装IIS或证书上服务提示安装程序无法复制文件 ftpsvc2.dl的解决办法
    tomcat
    版本控制gitlab
    rsync
  • 原文地址:https://www.cnblogs.com/Heltion/p/13516957.html
Copyright © 2011-2022 走看看