zoukankan      html  css  js  c++  java
  • poj 3630 Phone List

     1 #include<iostream> 
     2 #include<cstdio>
     3 #include<cstring>
     4 #define N 100005
     5 using namespace std;
     6 int Trie[N][10];
     7 int nodeN;
     8 int main()
     9 {
    10 int t, n, i, j, isPrefix, flag;
    11 char ph[15];
    12 scanf("%d", &t);
    13 while(t--)
    14 {
    15 scanf("%d", &n);
    16 isPrefix=0;
    17 nodeN=0; 
    18 memset(Trie[0], 0, sizeof(int)*10);
    19 for(i=0; i<n; ++i)
    20 {
    21   scanf("%s", ph);
    22   flag=0;
    23   int cur=0; 
    24   if(!isPrefix)
    25   for(j=0; ph[j]; ++j)
    26   {
    27     int k=ph[j]-'0';
    28     if(!Trie[cur][k])
    29     {
    30       if(i!=0 && !flag)//利用第一个字符串建立一个初始的trie树
    31       {
    32           flag=1;//建立了新节点(如果当前 cur 节点还有孩子说明没有公共前缀, 否则说明当前路已经走到了尽头,产生了公共前缀)
    33           int c;
    34          for(c=0; c<10; ++c)//检查时候当前节点cur是否有孩子节点
    35         if(Trie[cur][c])
    36          break;
    37       if(c>=10) 
    38       {
    39           isPrefix=1; //没有孩子节点,则说明产生了公共前缀
    40         break;
    41        }
    42      }
    43        Trie[cur][k]=++nodeN;
    44        memset(Trie[nodeN], 0, sizeof(int)*10);
    45      }
    46 cur=Trie[cur][k]; 47 } 48 if(flag==0 && i!=0)//如果不是第一个字符串,而且在遍历整个树的时候没有发现建立新的节点,则说明当前字符串必然是之前某个字符串的公共前缀 49 isPrefix=1; 50 } 51 if(isPrefix) 52 printf("NO "); 53 else printf("YES "); 54 } 55 return 0; 56 }
     /*
    好不容易想用一下链表来写一下,还超时啊。。。。
    */
    1
    #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 class Trie 6 { 7 public: 8 Trie *ch[10]; 9 Trie() 10 { 11 memset(ch, 0, sizeof(ch)); 12 } 13 }; 14 15 int main() 16 { 17 int t, n, i, j, isPrefix, flag; 18 char ph[15]; 19 scanf("%d", &t); 20 while(t--) 21 { 22 scanf("%d", &n); 23 Trie *root=new Trie(); 24 isPrefix=0; 25 for(i=0; i<n; ++i) 26 { 27 scanf("%s", ph); 28 flag=0; 29 Trie * cur=root; 30 if(!isPrefix) 31 for(j=0; ph[j]; ++j) 32 { 33 int k=ph[j]-'0'; 34 if(!cur->ch[k]) 35 { 36 if(i!=0 && !flag) 37 { 38 flag=1; 39 int c; 40 for(c=0; c<10; ++c) 41 if(cur->ch[c]) 42 break; 43 if(c>=10) 44 { 45 isPrefix=1; 46 break; 47 } 48 } 49 cur->ch[k]=new Trie(); 50 } 51 cur=cur->ch[k]; 52 } 53 if(flag==0 && i!=0) 54 isPrefix=1; 55 } 56 if(isPrefix) 57 printf("NO "); 58 else printf("YES "); 59 } 60 return 0; 61 }
  • 相关阅读:
    Python基础之入门
    Python基础之语句语法
    Python基础之变量
    Nginx实现反向代理和负载均衡
    Nginx配置文件简述
    Nginx简介及环境搭建
    C#利用RabbitMQ实现消息订阅与发布
    C#利用RabbitMQ实现点对点消息传输
    RabbitMQ交换机类型简述
    Android
  • 原文地址:https://www.cnblogs.com/hujunzheng/p/3777106.html
Copyright © 2011-2022 走看看