2015ACM/ICPC亚洲区沈阳站-重现赛 B - Bazinga (KMP)
2024-10-19 07:30:54
题意:给你\(n\)个字符串,\(s_1,s_2,...,s_n\),对于\(i(1\le i\le n)\),找到最大的\(i\),并且满足\(s_j(1\le j<i)\)不是\(s_i\)的子串.
题解:直接\(O(n^2)\)然后跑kmp匹配,这里注意要剪枝,不然会T,也就是说对于前\(i-1\)个串,如果它是后面某个串的子串,那么我们就不用对它跑kmp,因为它后面的某个串包含了它.
代码:
int t;
int n;
string s[N];
int ne[N];
bool st[N]; int main() {
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
cin>>t;
int cnt=1;
while(t--){
cin>>n;
me(st,false,sizeof(st));
for(int i=1;i<=n;++i){
cin>>s[i];
s[i]=" "+s[i];
}
int ans=-1;
for(int i=1;i<=n;++i){
for(int j=1;j<i;++j){
if(st[j]) continue;
string p=s[j];
string ss=s[i];
bool flag=false;
for(int k=2,t=0;k<(int)p.size();++k){
while(t!=0 && p[k]!=p[t+1]) t=ne[t];
if(p[k]==p[t+1]) t++;
ne[k]=t;
} for(int k=1,t=0;k<(int)ss.size();++k){
while(t!=0 && ss[k]!=p[t+1]) t=ne[t];
if(ss[k]==p[t+1]) t++;
if(t==(int)p.size()-1){
flag=true;
st[j]=true;
break;
}
}
if(!flag){
ans=max(ans,i);
break;
}
}
}
cout<<"Case #"<<cnt<<": "<<ans<<endl;
cnt++;
}
return 0;
}
最新文章
- C语言的一些小知识
- Java基础之网络编程
- 编译Android系统源码(高通平台)
- hdu5481 Desiderium
- Effective C++ -----条款49:了解new-handler 的行为
- InLineHookSSDT
- POJ 1068 AC 2014-01-07 15:24 146人阅读 评论(0) 收藏
- python笔记之编程风格大比拼
- TCP三次握手和四次挥手具体解释
- hdu-4471-Homework-矩阵快速幂+优化加速
- 跨域问题解决方案(HttpClient安全跨域 &; jsonp跨域)
- HttpServletResponse addHeader() 与 setHeader() 区别
- 2017面向对象程序设计(Java)第二周学习总结
- JAVA并发编程学习笔记------锁顺序死锁
- mysql 常用字段类型
- [原]Jenkins(四)---Jenkins添加密钥对
- 解决cocos2dx调用removeFromParent后报错问题
- Row_number 详解
- 冥想_ PHP抽奖程序概率算法
- 在vs2012中使用installShield2015打包程序
热门文章
- 【Linux】如何查找命令及历史记录history
- QPainter 绘制图像接口
- Python3.9的http.client.py下的HTTPMessage类中的方法getallmatchingheaders的bug修复建议
- Ubuntu对接GlusterFS
- Boyer-Moore 投票算法
- Linux 技巧:让进程在后台运行更可靠的几种方法
- detect data races The cost of race detection varies by program, but for a typical program, memory usage may increase by 5-10x and execution time by 2-20x.
- postgresql 知识的整理
- 你应该了解的25个JS技巧
- 从输入URL到页面展示,这中间都发生了什么?