hdu 1671 Phone list

来源:互联网 发布:淘宝信用度查询 编辑:程序博客网 时间:2024/05/21 16:54

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1671

题意:如果一个电话号码是另一个的前缀就输出NO,否则YES;

字典树;

#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;int t,n,up;char s[10010][15];struct{    int num;    int next[11];    void init()    {        num=0;        memset(next,-1,sizeof(next));    }}root[100000];inline void build(char *s){    int i,id,p=0;    int l=strlen(s);    for(i=0;i<l;i++)    {        id=s[i]-'0';        if(root[p].next[id]==-1)        {            root[p].next[id]=up;            root[up].init();            up++;        }        p=root[p].next[id];    }    root[p].num=1;}inline int query(char *s){    int i,id,p=0;    int l=strlen(s);    for(i=0;i<l;i++)    {        id=s[i]-'0';        if(root[p].next[id]==-1)        return -1;        if(root[p].num!=0)        return 0;        p=root[p].next[id];    }    return root[p].num;}int main(){    scanf("%d",&t);    while(t--)    {        up=1;        root[0].init();        scanf("%d",&n);        for(int i=0;i<n;i++)        {            scanf("%s",s[i]);            build(s[i]);        }        int flag=1;        for(int i=0;i<n;i++)        {            if(query(s[i])!=1)            {                flag=0;                break;            }        }        printf("%s\n",flag?"YES":"NO");    }    return 0;}


原创粉丝点击