Description

给定两个字符串集合A,B,均包含N个字符串,长度均为M,求一个最短的区间[l,r],使得不存在字符串\(a\in A,b\in B,\)且\(a[l,r]=b[l,r]\) ,字符串只由ACGT组成,

\(n,m\leq500\)

Input Format

第一行包含N,M,

接下来N行,每行一个长度为M的字符串,描述集合A

最后N行,描述集合B

Output Format

一行表示最短区间的长度

Sample Input

3 8

AATCCCAT

ACTTGCAA

GGTCGCAA

ACTCCCAG

ACTCGCAT

ACTTCCAT

Sample Output

4

Solution

emmm,可以用字典树\(O(n^3)\)过,

枚举左端点,对于集合A每个字符串构造字典树,

然后查询集合B中每个字符串,更新答案即可

这里有个优化,即如果集合B中存在一个字符串在字典树中完全存在,直接break跳到下个左端点因为答案一定不存在

Code

#include <cstdio>
#include <algorithm>
#include <cstring>
#define N 550
using namespace std; int n,m,tr[N*N][5],Ans,cnt;
char s1[N][N],s2[N][N]; inline int opx(const char &c){
switch(c){
case 'A':return 1;break;
case 'C':return 2;break;
case 'G':return 3;break;
default:return 4;break;
}
} inline void add(const int &id,const int &l){
int now=0;
for(int i=l;i<m;++i){
int k=opx(s1[id][i]);
if(!tr[now][k]) tr[now][k]=++cnt;
now=tr[now][k];
}
} inline int Find(const int &id,const int &l){
int now=0;
for(int i=l;i<m;++i){
int k=opx(s2[id][i]);
if(!tr[now][k]) return i-l+1;
now=tr[now][k];
}
return -1;
} int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;++i) scanf("%s\n",s1[i]);
for(int i=1;i<=n;++i) scanf("%s\n",s2[i]);
Ans=1e9;
for(int l=0;l<m;++l){
cnt=0;
int mx=0;
memset(tr,0,sizeof(tr));
for(int i=1;i<=n;++i) add(i,l);
for(int i=1;i<=n;++i){
int len=Find(i,l);
if(len==-1){mx=1e9;break;}
mx=max(mx,len);
}
if(mx==1e9) break;
Ans=min(Ans,mx);
}
printf("%d\n",Ans);
return 0;
}

最新文章

  1. 踩石行动:ViewPager无限轮播的坑
  2. APP常见崩溃原因和测试方法整理
  3. Connecting my Particle Photon Internet of Things device to the Azure IoT Hub(Translation)
  4. 【poj2079】 Triangle
  5. NYOJ16 矩形嵌套(DAG最长路)
  6. Windows Server 2008下共享资源访问走捷径 (不用用户名 和 密码 访问共享)
  7. C语言中strcpy(char *strDest, const char *strScr)字符串复制库函数的理解与分析
  8. nexus 7 2013 驱动安装及root
  9. RabbitMQ安装以及java使用(一)
  10. hive的数据导入与数据导出:(本地,云hdfs,hbase),列分隔符的设置,以及hdfs上传给pig如何处理
  11. iOS开发 支付之银联支付集成
  12. shell中使用带密码的方式直接pg_dump和psql
  13. [Swift]LeetCode803. 打砖块 | Bricks Falling When Hit
  14. adb.exe 已停止工作 解决
  15. js除法四舍五入
  16. .NET Framework简介
  17. Windows Server 2008系统
  18. Java面试题4
  19. python面试(3)
  20. [转载]eclipse的远程调试功能配置

热门文章

  1. 如何在 Centos7 中安装 nginx
  2. OC的特有语法-分类Category、 类的本质、description方法、SEL、NSLog输出增强、点语法、变量作用域、@property @synthesize关键字、Id、OC语言构造方法
  3. redis复制原理和应用
  4. ExpandableListView使用
  5. Ubuntu下删除VMware的方法
  6. scrapy初试水 day03(递归调用)
  7. 浅谈PipelineDB系列一: Stream数据是如何写到Continuous View中的
  8. springBoot系列教程02:mongodb的集成及使用
  9. vue 二进制文件的下载(解决乱码和解压报错)
  10. 导入mysql数据的时候提示Field * doesn&#39;t have a default value解决方法