【NOIP模拟】【USACO】 Bovine Genomics
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;
}
【NOIP模拟】【USACO】 Bovine Genomics的更多相关文章
- [USACO]Bovine Genomics
Description 给定两个字符串集合A,B,均包含N个字符串,长度均为M,求一个最短的区间[l,r],使得不存在字符串\(a\in A,b\in B,\)且\(a[l,r]=b[l,r]\) , ...
- NOIP模拟赛20161022
NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...
- contesthunter暑假NOIP模拟赛第一场题解
contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...
- NOIP模拟赛 by hzwer
2015年10月04日NOIP模拟赛 by hzwer (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...
- 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程
数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...
- 队爷的讲学计划 CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的讲学计划 题解:刚开始理解题意理解了好半天,然后发 ...
- 队爷的Au Plan CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的Au%20Plan 题解:看了题之后觉得肯定是DP ...
- 队爷的新书 CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的新书 题解:看到这题就想到了 poetize 的封 ...
- CH Round #58 - OrzCC杯noip模拟赛day2
A:颜色问题 题目:http://ch.ezoj.tk/contest/CH%20Round%20%2358%20-%20OrzCC杯noip模拟赛day2/颜色问题 题解:算一下每个仆人到它的目的地 ...
- CH Round #52 - Thinking Bear #1 (NOIP模拟赛)
A.拆地毯 题目:http://www.contesthunter.org/contest/CH%20Round%20%2352%20-%20Thinking%20Bear%20%231%20(NOI ...
随机推荐
- [转] 深刻理解Python中的元类(metaclass)
非常详细的一篇深入讲解Python中metaclass的文章,感谢伯乐在线-bigship翻译及作者,转载收藏. 本文由 伯乐在线 - bigship 翻译.未经许可,禁止转载!英文出处:stacko ...
- “战术竞技类”外挂打击已开始!揭秘腾讯We Test游戏安全服务新动作!
商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处. 原文链接:http://wetest.qq.com/lab/view/353.html We Test导读 国服PUBG的游戏安全将由我 ...
- Java面向对象回顾(1)
世界万物皆对象. 面向对象四大特性:继承.封装.多态.抽象 Java中现有类,再有对象.创建对象(对象实例化)必须先创建类. 将对象的特征对应写成类的属性. 将对象的方法对应携程类的方法. 如何创建对 ...
- selenium实现自动下载文件
#coding:utf-8'''说明:导出'''from selenium import webdriverfrom public.highlightElement import highlightf ...
- 【转】npm包管理器那些事
原文链接:http://www.cnblogs.com/shuoer/p/7782125.html npm包管理器那些事! 今天和朋友针对npm包全局安装和本地项目安装这个梗展开的激烈的讨论,故此做一 ...
- springmvc中对日期格式化的处理
@DateTimeFormat(pattern="yyyy-MM-dd") 返回的时候java.util.Date pattern="yyyy-MM-dd"必须 ...
- Linux常用命令及部分详解
1.总结部分 常用指令 ls 显示文件或目录 -l 列出文件详细信息l(list) -a 列出当前目录下所有文件及目录,包括隐藏的a(all) m ...
- Jdk8的学习之lambda
在JDK8中,引入了Lambda(读:了母达)表达式的概念,这是我最喜欢的特性,很多东西都变得简单了,一行代码可以搞定. 比如说排序 /** * 这是一个JDK8的lambda的排序应用 */ pub ...
- nanomsg 如何写数据到PipelineDB
nanomsg:https://github.com/nanomsg/nanomsg PipelineDB:https://github.com/pipelinedb/pipelinedb nanom ...
- SQL Server Profiler追踪数据库死锁