题意:判断给你的一些串中是否含有一个串是另一个串的前缀;
解法:字典树模板题!。
#include<bits/stdc++.h>
using namespace std;
char str[100005][15];
int flag;
struct node
{
node *next[10];
int cnt;
void init()
{
for(int i=0;i<10;i++)
next[i]=NULL;
cnt=0;
}
}*root;
void ct(char *s)
{
int len=strlen(s),k=0;
node *p=root;
for(int i=0;i<len;i++)
{
int j=s[i]-'0';
if(p->next[j]==NULL)
{
p->next[j]=new node;
p->next[j]->init();
p=p->next[j];
}
else
{
k++;
if(!flag)
{
if(p->next[j]->cnt)
{
printf("NO\n");
flag=1;
}
}
p=p->next[j];
}
}
if(!flag)
if(k==len)
{
flag=1;
printf("NO\n");
}
p->cnt++;
}
void dt(node *T)
{
if(T==NULL)
return;
for(int i=0;i<10;i++)
if(T->next[i])
dt(T->next[i]);
free(T);
return;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
flag=0;
root=new node;
root->init();
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%s",str[i]);
ct(str[i]);
}
if(!flag)
printf("YES\n");
dt(root);
}
return 0;
}