poj 3630 Phone List trie树

Phone List

Description

Given a list of phone numbers, determine if it is consistent in the sense that no number is the prefix of another. Let‘s say the phone catalogue listed these numbers:

  • Emergency 911
  • Alice 97 625 999
  • Bob 91 12 54 26

In this case, it‘s not possible to call Bob, because the central would direct your call to the emergency line as soon as you had dialled the first three digits of Bob‘s phone number. So this list would not be consistent.

Input

The first line of input gives a single integer, 1 ≤ t ≤ 40, the number of test cases. Each test case starts with n, the number of phone numbers, on a separate line, 1 ≤ n ≤ 10000. Then follows n lines with one unique phone number on each line. A phone number is a sequence of at most ten digits.

Output

For each test case, output "YES" if the list is consistent, or "NO" otherwise.

Sample Input

2
3
911
97625999
91125426
5
113
12340
123440
12345
98346

Sample Output

NO
YES

Source

Nordic 2007

题意:如果有一个字符串是别的字符串的前缀就输出NO,否则YES;

思路:最基本的trie树应用;

#include<iostream>
#include<cstdio>
#include<cmath>
#include<string>
#include<queue>
#include<algorithm>
#include<stack>
#include<cstring>
#include<vector>
#include<list>
#include<set>
#include<map>
using namespace std;
#define ll long long
#define mod 1000000007
#define pi (4*atan(1.0))
const int N=1e5+10,M=5e6+10,inf=1e9+10;
int a[N][27],sum[M],len;
void init()
{
    memset(a,0,sizeof(a));
    memset(sum,0,sizeof(sum));
    len=1;
}
int getnum(char a)
{
    return a-‘0‘;
}
void insertt(char *aa)
{
    int u=0,n=strlen(aa);
    for(int i=0; i<n; i++)
    {
        int num=getnum(aa[i]);
        if(!a[u][num])
        {
            a[u][num]=len++;
        }
        u=a[u][num];
        sum[u]++;
    }
}
int getans(char *aa)
{
    int u=0,x=strlen(aa);
    for(int i=0; i<x; i++)
    {
        int num=getnum(aa[i]);
        if(!a[u][num])
            return 0;
        u=a[u][num];
    }
    return sum[u];
}
char ch[N][15];
int main()
{
    int x,y,z,i,t;
    int T;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d",&x);
        init();
        for(i=0; i<x; i++)
        {
            scanf("%s",ch[i]);
            insertt(ch[i]);
        }
        int flag=1;
        for(i=0;i<x;i++)
        {
            if(getans(ch[i])!=1)
            {
                flag=0;
                break;
            }
        }
        if(flag)
        printf("YES\n");
        else
        printf("NO\n");
    }
    return 0;
}
时间: 2025-01-13 16:17:54

poj 3630 Phone List trie树的相关文章

poj 3630 Phone List (字典树 +静态字典树)

Phone List Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 22235   Accepted: 6885 Description Given a list of phone numbers, determine if it is consistent in the sense that no number is the prefix of another. Let's say the phone catalogu

POJ训练计划2418_Hardwood Species(Trie树)

解题报告 Tire树. #include <iostream> #include <cstring> #include <cstdio> #include <algorithm> using namespace std; struct node { int v; node *next[256]; }; int cnt=0,q; char ch[100],str1[100]; node *newnode() { node *p=new node; p->

[POJ 1204]Word Puzzles(Trie树暴搜)

Description Word puzzles are usually simple and very entertaining for all ages. They are so entertaining that Pizza-Hut company started using table covers with word puzzles printed on them, possibly with the intent to minimise their client's percepti

poj 2418 Hardwood Species (trie树)

poj   2418   Hardwood Species http://poj.org/problem?id=2418 trie树+dfs 题意: 给你多个单词,问每个单词出现的频率. 方法:通过字典树,将所有单词放入树中,通过dfs遍历(题目要求按ASSIC码顺序输出单词及其频率),dfs可满足 注意:单词中不一定只出现26个英文字母,ASSIC码表共有256个字符 1 #include <stdio.h> 2 #include <string.h> 3 #include &l

[ACM] POJ 2513 Colored Sticks (Trie树,欧拉通路,并查集)

Colored Sticks Time Limit: 5000MS   Memory Limit: 128000K Total Submissions: 29736   Accepted: 7843 Description You are given a bunch of wooden sticks. Each endpoint of each stick is colored with some color. Is it possible to align the sticks in a st

POJ 2513 Colored Sticks (Trie树+并查集+欧拉路)

Colored Sticks Time Limit: 5000MS   Memory Limit: 128000K Total Submissions: 31490   Accepted: 8320 Description You are given a bunch of wooden sticks. Each endpoint of each stick is colored with some color. Is it possible to align the sticks in a st

poj 2513 Colored Sticks (trie 树)

链接:poj 2513 题意:给定一些木棒,木棒两端都涂上颜色,不同木棒相接的一边必须是 相同的颜色,求是否能将木棒首尾相接,连成一条直线. 分析:可以用欧拉路的思想来解,将木棒的每一端都看成一个结点 由图论知识可以知道,无向图存在欧拉路的充要条件为: ①     图是连通的: ②     所有节点的度为偶数,或者有且只有两个度为奇数的结点. 图的连通性可以用并查集,因为数据比较大,所以用并查集时要压缩路径, 所有节点的度(入度和出度的和)用数组记录就好 但是25w个木棒,有50w个结点,要怎么

[ACM] POJ 2418 Hardwood Species (Trie树或map)

Hardwood Species Time Limit: 10000MS   Memory Limit: 65536K Total Submissions: 17986   Accepted: 7138 Description Hardwoods are the botanical group of trees that have broad leaves, produce a fruit or nut, and generally go dormant in the winter. Ameri

[ACM] POJ 2418 Hardwood Species (Trie树或者map)

Hardwood Species Time Limit: 10000MS   Memory Limit: 65536K Total Submissions: 17986   Accepted: 7138 Description Hardwoods are the botanical group of trees that have broad leaves, produce a fruit or nut, and generally go dormant in the winter. Ameri