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

    POJ_3630

        为了练一下字典树所以做了这个题目,开数组的时候虽然号码只有10000个,但字典树的数字元素却一共可能有100000个。

    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #define MAXN 10010
    #define MAXD 100010
    char dig[MAXN][15];
    int len[MAXN], r[MAXN], N;
    int flag[MAXD], next[MAXD][10], e;
    int cmp(const void *_p, const void *_q)
    {
    int *p = (int *)_p;
    int *q = (int *)_q;
    return len[*q] - len[*p];
    }
    void init()
    {
    int i, j, k;
    scanf("%d", &N);
    for(i = 0; i < N; i ++)
    {
    scanf("%s", dig[i]);
    len[i] = strlen(dig[i]);
    }
    for(i = 0; i < N; i ++)
    r[i] = i;
    qsort(r, N, sizeof(r[0]), cmp);
    }
    void insert(int cur, int k)
    {
    ++ e;
    flag[e] = 0;
    memset(next[e], 0, sizeof(next[e]));
    next[cur][k] = e;
    }
    int solve()
    {
    int i, j, k, p, cur;
    e = 0;
    memset(next[e], 0, sizeof(next[e]));
    for(i = 0; i < N; i ++)
    {
    p = r[i];
    cur = 0;
    for(j = 0; dig[p][j]; j ++)
    {
    k = dig[p][j] - '0';
    if(!next[cur][k])
    insert(cur, k);
    flag[cur] = 1;
    cur = next[cur][k];
    }
    if(flag[cur])
    return 0;
    flag[cur] = 1;
    }
    return 1;
    }
    int main()
    {
    int t;
    scanf("%d", &t);
    while(t --)
    {
    init();
    printf("%s\n", solve() ? "YES" : "NO");
    }
    return 0;
    }


  • 相关阅读:
    NETCore中RabbitMQ的使用
    net core 中间件
    表达式和表达式树
    NET
    解决Net内存泄露原因
    Spring的IoC容器-Spring BeanFactory容器
    Spring的Hello World工程
    Linux下使用curl进行http请求(转)
    Java教程收集
    使用wget进行整站下载(转)
  • 原文地址:https://www.cnblogs.com/staginner/p/2320877.html
Copyright © 2011-2022 走看看