Phone List

来源:互联网 发布:光谷软件新城 编辑:程序博客网 时间:2024/06/01 07:27


http://acm.hdu.edu.cn/showproblem.php?pid=1671

#include<iostream>
using namespace std;
int ok;
struct trie
{
 int flag;
 trie *next[10];
};
trie *root;
trie *newtrie()
{
 trie *t;
 t=(trie*)malloc(sizeof(trie));
 memset(t,0,sizeof(trie));
 return t;
}
void Insert(char *ch)
{
 if(ok==0)
  return;
 int i;
 trie *s;
 s=root;
 for(i=0;ch[i];i++)
 {
  if(s->next[ch[i]-'0'])
  {
   s=s->next[ch[i]-'0'];
   if(s->flag)
   {
    ok=0;
    return ;
   }
  }
  else
  {
   s->next[ch[i]-'0']=newtrie();
   s=s->next[ch[i]-'0'];
  }
 }
 s->flag=1;
 for(i=0;i<10;i++)
 {
  if(s->next[i])
  {
   ok=0;
   return;
  }
 }
}
void delete_tree(trie *root)
{
 int i;
 for(i=0;i<10;i++)
  if(root->next[i]!=NULL)
   delete_tree(root->next[i]);
 delete root;
}
int main()
{
// freopen("C:\\Users\\John\\Desktop\\hi.txt","r",stdin);
 int t,n;
 char c[20];
 cin>>t;
 while(t--)
 {
  cin>>n;
  ok=1;
  root=newtrie();
  while(n--)
  {
   cin>>c;
   Insert(c);
  }
  if(ok)
   cout<<"YES"<<endl;
  else
   cout<<"NO"<<endl;
  delete_tree(root);
 }
 return 0;
}

0 0