• POJ3630 Phone List Trie树 | qsort


      题目链接:http://poj.org/problem?id=3630

      建立一个Trie树查找就可以了,但是这里动态建立Trie居然会超时,静态化居然可以秒,太不厚道了= =

      当然还可以用qsort秒过,依次比较。。。

     1 //STATUS:C++_AC_110MS_2568KB
     2 #include<stdio.h>
     3 #include<stdlib.h>
     4 #include<string.h>
     5 #include<math.h>
     6 #include<iostream>
     7 #include<string>
     8 #include<algorithm>
     9 #include<vector>
    10 #include<queue>
    11 #include<stack>
    12 #include<map>
    13 using namespace std;
    14 #define LL long long
    15 #define pii pair<int,int>
    16 #define Max(a,b) ((a)>(b)?(a):(b))
    17 #define Min(a,b) ((a)<(b)?(a):(b))
    18 #define mem(a,b) memset(a,b,sizeof(a))
    19 #define lson l,mid,rt<<1
    20 #define rson mid+1,r,rt<<1|1
    21 #define PI acos(-1.0)
    22 const int N=10010,INF=0x3f3f3f3f,MOD=10000,STA=8000010;
    23 const LL LNF=0x3f3f3f3f3f3f3f3f;
    24 const double DNF=1e13;
    25 //
    26 void swap(int& a,int& b){int t=a;a=b;b=t;}
    27 void swap(LL& a,LL& b){LL t=a;a=b;b=t;}
    28 //
    29 
    30 struct Trie {
    31     int ch[1<<16][10];
    32     int val[1<<16];
    33     int sz;
    34 
    35     void init(){sz=1;mem(ch[0],0);}
    36     void insert(char *s,int v){
    37         int i,len=strlen(s),id,u=0;
    38         for(i=0;i<len;i++){
    39             id=s[i]-'0';
    40             if(!ch[u][id]){
    41                 mem(ch[sz],0);
    42                 val[sz]=0;
    43                 ch[u][id]=sz++;
    44             }
    45             u=ch[u][id];
    46         }
    47         val[u]=v;
    48     }
    49     int find(char *s){
    50         int i,len=strlen(s),id,u=0;
    51         for(i=0;i<len;i++){
    52             id=s[i]-'0';
    53             if(!ch[u][id])return 0;
    54             u=ch[u][id];
    55         }
    56         for(i=0;i<10;i++)
    57             if(ch[u][id])return 1;
    58         return 0;
    59     }
    60 }trie;
    61 
    62 int T,n;
    63 char s[12];
    64 
    65 int main()
    66 {
    67  //   freopen("in.txt","r",stdin);
    68     int i,j,ok;
    69     scanf("%d",&T);
    70     while(T--)
    71     {
    72         ok=1;
    73         trie.init();
    74         scanf("%d",&n);
    75         while(n--){
    76             scanf("%s",s);
    77             if(trie.insert(s,1)){ok=0;break;}
    78         }
    79         if(n>1)while(n--)scanf("%s",s);
    80 
    81         printf("%s\n",ok?"YES":"NO");
    82     }
    83     return 0;
    84 }
  • 相关阅读:
    C#判断一个字符串是否是数字或者含有某个数字
    SQL多字段排序
    对于过长字符串的大小比对
    WebFrom页面绑定数据过于冗长的处理方法
    webform的导出
    SQL数据库Truncate的相关用法
    SQL的CharIndex用法
    近期总结
    每周一水(4-1)
    Codeforces Round #238 (Div. 2) 解题报告
  • 原文地址:https://www.cnblogs.com/zhsl/p/3024866.html
Copyright © 2020-2023  润新知