首页 > 代码库 > HDU 1671 Phone List(字符处理)

HDU 1671 Phone List(字符处理)

题目

 

用字典树可以过,可是我写的字典树一直各种错误,,,

所以,我用了别的更简便的方法、、

 

 

//去你妹的一直有问题的字典树!!!////字典树,树的根是空的//////#include<iostream>//#include<cstdio>////#include<list>//#include<algorithm>//#include<cstring>////#include<string>////#include<queue>////#include<stack>////#include<map>////#include<vector>////#include<cmath>////#include<memory.h>//原来G++里面没有这个库////#include<set>//using namespace std;////#define ll __int64//int pos;//struct tt//{//    int arr[15],val;//val 记录数目的//}a[900010];//用数组模拟,总会遇上内存或大或小的情况。。。。////void insert(char *s,int id,int d,int len)//{//    if(d==len)return ;////    int t=s[d]-‘0‘;//    if(a[id].arr[t]==0)//        a[id].arr[t]=++pos;//    id=a[id].arr[t];//这样子,第一个(0)就是空的,相当于所有值都往后移了一位//    a[id].val++;//    insert(s,id,d+1,len);//}////bool search(char *s,int id)//{//    int len=strlen(s);//    for(int i=0;i<len;i++)//    {//        int t=s[i]-‘0‘;//        //因为一定能找到一个(就是它本身),所以不需要if//        //    if(a[id].arr[t]==-1)return 0;//        //    else //        id = a[id].arr[t];//    }//    //除了本身前缀,还有至少一个//    if(a[id].val>1)return 1;//为了便于这边找值,所以字典树建树的时候,第一个(也就是0)要空出来//    return 0;//}////int main()//{//    int t;//    scanf("%d",&t);//    while(t--)//    {//        int n;//        scanf("%d",&n);//        int pos=0;//        memset(a,0,sizeof(a));//        char s[10010][15];//        for(int i=0;i<n;i++)//        {//            scanf("%s",s[i]);//            int len=strlen(s[i]);//            insert(s[i],0,0,len);//        }//        int flag=0;//        n--;//        for(int i=0;i<n;i++)//        {//            if(search(s[i],0))//            {//                flag=1;//                break;//            }//        }//        if(flag==1)printf("NO\n");//        else printf("YES\n");//    }//    return 0;//}////我用别的方法做了,你妹妹的//吃饭前若能过了,,,,我就去吃饭#include<iostream>#include<string>#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;int main(){    int t,n;    string s[10010];    scanf("%d",&t);    while(t--)    {        scanf("%d",&n);        for(int i=0;i<n;i++)        {            cin>>s[i];        }        sort(s,s+n);//排序之后,若有前缀关系,则前一个一定是后一个的前缀        int flag=1;        for(int i=1;i<n;i++)        {            int len=s[i-1].length();            string ss(s[i],0,len);//C++中string的操作:复制函数:s[i]的 0~j 位复制给ss            if(ss==s[i-1])            {                flag=0;break;            }        }        if(flag)printf("YES\n");        else printf("NO\n");    }    return 0;}
View Code