博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[POI2000] 最长公共子串
阅读量:4597 次
发布时间:2019-06-09

本文共 1194 字,大约阅读时间需要 3 分钟。

给出几个由小写字母构成的单词,求它们最长的公共子串的长度。

任务

  • 从文件中读入单词
  • 计算最长公共子串的长度
  • 输出结果到文件

输入

文件的第一行是整数 n,1<=n<=5,表示单词的数量。接下来n行每行一个单词,只由小写字母组成,单词的长度至少为1,最大为2000。

输出:

仅一行,一个整数,最长公共子串的长度。

样例输入:

3abcbbcaacbc

样例输出:

2 题解: 显然所有的串先合并,然后用不同符号间隔 最后二分答案,找到high[i]大于答案x的 并不断往后扩展 如果满足所有子串都覆盖到即满足 为什么我总喜欢把 L开成char?
1 #include 
2 #include
3 #include
4 #include
5 #include
6 #include
7 using namespace std; 8 const int N=20005; 9 int s[N],n=0,k,tmp[N],sa[N],rk[N],high[N],color[N],m,l[6];char S[6][2005];10 bool comp(int i,int j){11 if(rk[i]!=rk[j])return rk[i]
=lim){48 p=i;49 while(p
=lim)p++;p++;50 for(int j=1;j<=m;j++)d[j]=false;51 for(int j=i;j<=p;j++)d[color[sa[j]]]=true;52 ret=p;p=1;53 while(p<=m && d[p])p++;54 if(p==m+1)return true;55 i=ret;56 }57 }58 return false;59 }60 int main()61 {62 freopen("pow.in","r",stdin);63 freopen("pow.out","w",stdout);64 int r=2e8;65 scanf("%d",&m);66 for(int i=1;i<=m;i++){67 scanf("%s",S[i]);68 l[i]=strlen(S[i]);69 if(l[i]
>1;77 if(check(mid))ans=mid,l=mid+1;78 else r=mid-1;79 }80 printf("%d\n",ans);81 return 0;82 }
 

 

 

转载于:https://www.cnblogs.com/Yuzao/p/7163563.html

你可能感兴趣的文章
system表空间空间解决(ORA-00604 ORA-01653 ORA-02002)
查看>>
【原创】敏捷软件产品/项目开发管理流程(一)
查看>>
Node.js中的express框架,修改内容后自动更新(免重启),express热更新
查看>>
团队每日冲刺04
查看>>
oracle中的decode的使用
查看>>
PHP生成中文验证码并检测对错实例
查看>>
数据库经典练习题整理
查看>>
android与javaee通信:登录界面超级简化版
查看>>
Nhibernate3.3.3sp1基础搭建测试
查看>>
Python之模块与包
查看>>
C++中获取文件大小的几种途径汇总~
查看>>
JavaScript原始基础
查看>>
JDBC_基础6步骤- 及优化
查看>>
WCM重启报数据库启动错误
查看>>
totoise svn误将桌面作为checkout路径,界面一堆?
查看>>
java写"\n"写入到txt文本用记事本打开出现黑框解决方案
查看>>
第三章例3-7
查看>>
心得五
查看>>
react antD moment
查看>>
MySql创建指定字符集的数据库
查看>>