发现一道很好的题。http://codeforces.com/problemset/problem/988/B
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
using namespace std;
struct node
{
char a[105];
int len;
};
bool cmp(struct node a,struct node b)
{
return a.len<b.len;
}
char *search(char *s,char *t)
{
int i,j,k=0,slen,tlen;
char *p=NULL;
slen=strlen(s);
tlen=strlen(t);
for(i=0;i<slen;i++)
{
j=i;
while(s[j]==t[k])
{
k++;
j++;
}
if(k>=tlen)
{
p=&s[i];
return p;
}
k=0;
}
return p;
}
int main()
{
int n,i,flag=1;
char *pos;
struct node str[105];
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%s",&str[i].a);
str[i].len=strlen(str[i].a);
}
sort(str,str+n,cmp);
for(i=1;i<n;i++)
{
pos=search(str[i].a,str[i-1].a);
if (pos==NULL)
flag=0;
}
if(flag==0) printf("NO");
else
{
printf("YES\n");
for(i=0;i<n;i++)
{
printf("%s\n",str[i].a);
}
}
return 0;
}
分析如下:
本题主要考察了sort函数的用法,以及字符串匹配算法。