fzu 2128

来源:互联网 发布:上海软件学院 编辑:程序博客网 时间:2024/06/05 17:48

第一组实例

aaaa
2
aa
aa

第二组
a
1
c

第三组
abcdef
2
abcd
bcd


第四组

abcdef
2
abcd
bcde
第五组
aaaa
2
a
aa

第六组
lgcstraightlalongahisnstreet
5
str
long
tree
biginteger
ellipse




#include<stdio.h>

#include<string.h>//考虑了很多实例
#include<stdlib.h>
#define N  1100000
char  s[N],str[1100][200];
struct node {
int start,end,index;
}hst[N],hen[N];
int cmp(const void *a,const void *b) {
return (*(struct node *)a).start>(*(struct node *)b).start?1:-1;
}
int compare(const void *a,const void *b) {
return (*(struct node *)a).end>(*(struct node *)b).end?1:-1;
}
int main() {
int n,max,index,to,ans,start,end,i,j;
while(scanf("%s",s)!=EOF) {
scanf("%d",&n);
index=0;
for(i=0;i<n;i++) {
scanf("%s",str[i]);
to=0;
for(j=0;j<i;j++)
if(strcmp(str[j],str[i])==0)//第一组
to=1;
if(to)
continue;
while(1) {
if(strstr(s+to,str[i])==NULL)
break;
hst[index].index=index;
hst[index].start=strstr(s+to,str[i])-&s[0];
hst[index].end=hst[index].start+strlen(str[i])-1;
hen[index]=hst[index];
to=hst[index].start+1;
index++;
}
}
if(index==0) {//第二组
printf("%d\n",strlen(s));
continue;
}
qsort(hst,index,sizeof(hst[0]),cmp);
qsort(hen,index,sizeof(hen[0]),compare);
   start=hen[0].end;
   end=strlen(s)-hst[index-1].start-1;
   max=end>start?end:start;
for(i=0;i<index;i++) {
           ans=0;
           for(j=0;j<index;j++)
  if(hen[j].index!=hst[i].index&&hen[j].end>=hst[i].start)  {
                  ans=hen[j].end-hst[i].start-1;
 break;
  }
  if(max<ans)
  max=ans;
}
printf("%d\n",max);
}
return 0;
}
0 0
原创粉丝点击