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;
    }


  • 相关阅读:
    python3中,os.path模块下常用的用法总结
    python 中str format 格式化数字补0方法
    5分钟让你明白“软链接”和“硬链接”的区别
    获得Python脚本所在目录
    sshd超时
    pip 指定源安装
    python编程规范
    Git冲突解决
    Git冲突解决
    git 更新某个目录或文件
  • 原文地址:https://www.cnblogs.com/staginner/p/2320877.html
Copyright © 2011-2022 走看看