枚举$B$串的每个后缀,统计出该后缀所有满足条件的前缀。

考虑暴力搜索,设状态$(x,y,z)$表示当前需要考虑$A$从$x$开始的后缀,$B$从$y$开始的后缀,之前部分编辑距离为$z$。

那么首先用后缀数组+ST表求出两个后缀的lcp,$x$和$y$都可以向右跳那么多,且不产生任何代价。

如果此时匹配到了底,那么可以得到在一段区间$[L,R]$内,所有前缀都是合法的。注意到这种前缀只有$2K+1$种,所以可以使用差分前缀和来进行标记。

如果还没有匹配到底,那么有$3$种选择,分别是状态$(x+1,y,z+1)$、$(x,y+1,z+1)$以及$(x+1,y+1,z+1)$。

时间复杂度$O(n\log n+n3^k)$。

#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 100010
using namespace std;
char s[N],A[N],B[N];
int K,na,nb,n,m,i,j,rk[N],sa[N],height[N],tmp[N],cnt[N],Log[N],f[17][N],c[15],ans;
void suffixarray(int n,int m){int i,j,k;n++;for(i=0;i<n;i++)cnt[rk[i]=s[i]]++;for(i=1;i<m;i++)cnt[i]+=cnt[i-1];for(i=0;i<n;i++)sa[--cnt[rk[i]]]=i;for(k=1;k<=n;k<<=1){for(i=0;i<n;i++){j=sa[i]-k;if(j<0)j+=n;tmp[cnt[rk[j]]++]=j;}sa[tmp[cnt[0]=0]]=j=0;for(i=1;i<n;i++){if(rk[tmp[i]]!=rk[tmp[i-1]]||rk[tmp[i]+k]!=rk[tmp[i-1]+k])cnt[++j]=i;sa[tmp[i]]=j;}memcpy(rk,sa,n*sizeof(int));memcpy(sa,tmp,n*sizeof(int));if(j>=n-1)break;}for(j=rk[height[i=k=0]=0];i<n-1;i++,k++)while(~k&&s[i]!=s[sa[j-1]+k])height[j]=k--,j=rk[sa[j]+1];
}
inline int ask(int x,int y){int k=Log[y-x+1];return min(f[k][x],f[k][y-(1<<k)+1]);
}
inline int lcp(int x,int y){if(x>=na||y>=nb)return 0;x=rk[x],y=rk[y+na+1];if(x>y)swap(x,y);return ask(x+1,y);
}
inline void col(int l,int r){if(l<i)l=i;if(r>=nb)r=nb-1;c[l-i-na+K+2]++,c[r-i-na+K+3]--;
}
void dfs(int x,int y,int z){int t=lcp(x,y);x+=t,y+=t;if(x==na||y==nb){int c=K-(z+na-x);if(c>=0)col(y-1-c,y-1+c);return;}if(z==K)return;z++;dfs(x+1,y,z);dfs(x,y+1,z);dfs(x+1,y+1,z);
}
int main(){scanf("%d%s%s",&K,A,B);na=strlen(A),nb=strlen(B);for(i=0;i<na;i++)s[n++]=A[i];s[n++]='#';for(i=0;i<nb;i++)s[n++]=B[i];suffixarray(n,128);for(i=2;i<=n;i++)Log[i]=Log[i>>1]+1;for(i=1;i<=n;i++)f[0][i]=height[i];for(j=1;j<17;j++)for(i=1;i+(1<<j-1)<=n;i++)f[j][i]=min(f[j-1][i],f[j-1][i+(1<<j-1)]);for(m=2*K+1,i=0;i<nb;i++){for(j=1;j<=m;j++)c[j]=0;dfs(0,i,0);for(j=1;j<=m;j++)if(c[j]+=c[j-1])ans++;}return printf("%d",ans),0;
}

  

BZOJ4340 : BJOI2015 隐身术相关推荐

  1. [BJOI2015] 树的同构

    4337: BJOI2015 树的同构 Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 1092  Solved: 460 [Submit][Stat ...

  2. BZOJ4336: BJOI2015 骑士的旅行

    BZOJ4336: BJOI2015 骑士的旅行 Description 在一片古老的土地上,有一个繁荣的文明. 这片大地几乎被森林覆盖,有N座城坐落其中. 巧合的是,这N座城由恰好N-1条双向道路连 ...

  3. 无根树的同构:Hash最小表示法(bzoj 4337: BJOI2015 树的同构)

    这里的同构是指: 对于两棵树A, B,如果能通过重新标号使得两棵树完全相同,则称树A和B同构 Hash最小表示法步骤: ①暴力每个节点为根 ②对于当前根x,对树进行DFS ③DFS时对每个节点维护一个 ...

  4. AI 隐身术,让你在视频中消失的“黑魔法”,想拥有吗?

    来源 | Jack Cui 责编 | 晋兆雨 头图 | 付费下载于视觉中国 前言 刚刚过去的 2020 年 ECCV,有一项 AI"隐身"技术引人瞩目. 正在坐秋千的小孩,突然只剩 ...

  5. bzoj 4338[BJOI2015] 糖果 - 组合

    4338: BJOI2015 糖果 Time Limit: 2 Sec  Memory Limit: 256 MB Description Alice 正在教她的弟弟 Bob 学数学.  每天,Ali ...

  6. bzoj 4338: BJOI2015 糖果

    4338: BJOI2015 糖果 Time Limit: 2 Sec  Memory Limit: 256 MB Submit: 200  Solved: 93 [Submit][Status][D ...

  7. 4338: BJOI2015 糖果

    4338: BJOI2015 糖果 Time Limit: 2 Sec  Memory Limit: 256 MB Submit: 141  Solved: 66 [Submit][Status][D ...

  8. P5043 【模板】树同构([BJOI2015]树的同构 // P4323 [JSOI2016]独特的树叶

    一.P5043 [模板]树同构([BJOI2015]树的同构): #include<iostream> #include<cstdio> #include<algorit ...

  9. 4336: BJOI2015 骑士的旅行

    4336: BJOI2015 骑士的旅行 Time Limit: 20 Sec   Memory Limit: 512 MB Submit: 282   Solved: 123 [ Submit][ ...

  10. 4337: BJOI2015 树的同构

    4337: BJOI2015 树的同构 Time Limit: 10 Sec   Memory Limit: 256 MB Submit: 171   Solved: 81 [ Submit][ St ...

最新文章

  1. 人工智能学习框架TensorFlow渐近分析
  2. 常用贴片三极管主要参数
  3. 从StreamCorruptedException解析值:无效的流头消息
  4. java filedialog 打开文件_java 用文件对话框打开文件
  5. 收集的正则表达式列子大全,方面他人,自己备用
  6. 直播svga礼物特效怎样制作流程
  7. 2021年PMP考试模拟题4(含答案解析)
  8. 传统运维 VS 互联网运维 框架体系大观
  9. 初学者想自学单片机需要买什么呢?
  10. 使用 TiUP 部署 DM 集群
  11. hive分隔符_hive默认分隔符
  12. 2020年6月——北京大学《软件工程》笔记
  13. Mac系统重置MySQL的 root密码
  14. 关于RECON-NG相关问题解决
  15. 程序员生存定律-打造属于自己的稀缺性
  16. 台式计算机usb口不识别鼠标,总算找到无法识别usb鼠标设备怎么办
  17. 贪心算法(Greedy)
  18. 用VML标记语言画图、动画制作
  19. rtp协议丢包以及包重复判断
  20. 系统级ESD:一盎司预防胜过一磅治疗

热门文章

  1. docker安装ng+tomcat+es+kiba+sql
  2. 你想要的宏基因组-微生物组知识全在这(1905)
  3. 714. 买卖股票的最佳时机含手续费
  4. Go-Excelize API源码阅读(二十五)——GetSheetName、GetSheetIndex、GetSheetMap()
  5. codeup3692 星期英文单词
  6. 使 div 水平 垂直 居中
  7. 上交计算机就业报告,上海交通大学计算机研究生去向及就业情况分析
  8. buuctf|ciscn_2019_en_2 1
  9. node.js+cocoscreator自研斗地主游戏
  10. 台式电脑主板插线步骤图_机箱上的跳线接在主板那些位置?台式电脑主板接线示意图解教程...