【小A撸串串(string)】
问题描述
小A想撸 n 根串,每个串的长度为 d 。小A想找出 n 根串都有的一个子串,使得这个子串的长度最大。
数据输入
从文件string.in中读入数据。
第一行输入两个正整数 n,d。
接下来 n 行,每行输入一个长度为 d 的仅包含大小写字母的字符串。
结果输出
输出到文件string.out中。
输出一行一个整数表示 n 个串的最长公共子串长度。
输入示例
3 6
aabcab
abcaab
bcabca
输出示例
4
数据范围
对于20%的数据,n=1。
对于100%的数据,n,d<=30。
我不知道为什么0分但是样例+手造数据全过的代码
#include<cstdio>
#include<cstring>
#include<iostream>
char str[31][31];
int n,d;
inline int read(){
int s=0;char ch=getchar();
while(ch<='9'&&ch>='0')
{
s=s*10+ch-'0';
ch=getchar();
}
return s;
}
int main()
{
//freopen("string.in","r",stdin);
//freopen("string.out","w",stdout);
n=read();d=read();
int minstr=1,minlen=d;
for(register int i=0;i<n;i++)
{
gets(str[i]);
}
char dest[31],ans[31];
int maxn=0;
for(register int i=0;i<minlen;i++){
for(register int j=0;j<minlen-i;j++)
{
strncpy(dest,str[minstr]+i,j);
dest[j]='\0';
bool flag=1;
for(register int k=0;k<n;k++)
{
if(strstr(str[k],dest)==NULL){
flag=0;break;
}
}
if(flag&&strlen(dest)>maxn){
maxn=strlen(dest);
strcpy(ans,dest);
}
}
}
printf("%d",maxn);
return 0;
}
有人能告诉我原因吗???