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

HDU 1671 Phone List(字符处理)

时间: 2024-11-15 01:03:19

HDU 1671 Phone List(字符处理)的相关文章

HDU 1671 Phone List(Trie的应用与内存释放)

Phone List Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 18217    Accepted Submission(s): 6120 Problem Description Given a list of phone numbers, determine if it is consistent in the sense th

字典树 Trie (HDU 1671)

Problem 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: 1. Emergency 911 2. Alice 97 625 999 3. Bob 91 12 54 26 In this

HDU 1711 Number Sequence(字符串匹配)

Number Sequence Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 10571    Accepted Submission(s): 4814 Problem Description Given two sequences of numbers : a[1], a[2], ...... , a[N], and b[1],

HDU 1671 (字典树统计是否有前缀)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1671 Problem 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: 1. Emergenc

字典树模板+HDU 1671 ( Phone List )(字典树)

字典树指针模板(数组模板暂时还没写): 1 #include<cstdio> 2 #include<string.h> 3 #include<algorithm> 4 using namespace std; 5 const int MAX=26; 6 const int maxn=1e4+100; 7 int N; 8 9 struct Trie 10 { 11 Trie *next[MAX]; 12 int v;///v要灵活使用,具体情况具体分析 13 }; 14

HDU 1671 Phone List (Trie树 好题)

Phone List Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 11721    Accepted Submission(s): 3982 Problem Description Given a list of phone numbers, determine if it is consistent in the sense th

(字典树)HDU - 1671 Phone List

原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1671 题意:给很多电话号码,如果在拨号的时候,拨到一个存在的号码,就会直接打出去,以致以这个号码为前缀的所有其他比这个号码长的号码将不能拨出,问是不是所有的号码都能拨. 分析:可以直接建立字典树,节点中用boolean变量表示当前是否组成电话号码,一旦在遍历完某条号码之前,已经出现存在号码,则发现问题,返回false,否则true. 我使用了一个反过来的方法,即只统计前缀出现次数,遍历完某条号码,如

poj 3630 / hdu 1671 Phone List 【Trie字典树 动态创建&amp;静态创建】

Phone List Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 25160   Accepted: 7641 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

HDU 5716 带可选字符的多字符串匹配(ShiftAnd)

[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5716 [题目大意] 给出一个字符串,找出其中所有的符合特定模式的子串位置,符合特定模式是指,该子串的长度为n,并且第i个字符需要在给定的字符集合Si中 [题解] 这种串与字符集的匹配称为柔性字符串匹配,采用ShiftAnd的匹配方法. bt[i]表示字符i允许在哪些位置上出现,我们将匹配成功的位置保存在dp中,那么就可以用dp[i]=dp[i-1]<<1&bt[s[i]]来更新答案了