Phone List

Time Limit: 1 Sec     Memory Limit: 128 Mb     Submitted: 140     Solved: 35


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 题意:查询n个字符串,是否存在一个字符串是其他字符串的前缀。 秒想到字典树,撸模版AC了,然后和队友交流,学长说我写的太复杂了,直接用set写就行了。我后面试这写了一下,但是一直超时,各种优化实在出不来,问了下学长,了解了新操作,涨知识了了。

第一个是set写的,下面这个是字典树写的,set这个很卡时间,数据再强一点也许就卡了。
 
然后再HDU上提交,HDU把内存卡30M了,所以普通的字典树内存可能不够,就改进写成了树状数组(静态字典树),内存就被压缩到了6.7M,也能过了;
aaarticlea/png;base64,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" alt="" />
字典树法:
#include "cstdio"
#include "cstring"
#include "iostream"
#include "algorithm"
#include "cmath"
using namespace std;
#define memset(x,y) memset(x,y,sizeof(x)) const int MX = 1e6 + 5; struct Trie{
int v;
Trie *next[11];
}root; void Build(char *s){
int len = strlen(s);
Trie *p=&root,*q;
for(int i=0;i<len;i++){
int num=s[i]-'0';
if(p->next[num]==NULL){
q=(Trie *)malloc(sizeof (root));
q->v=1;
for(int j=0;j<11;j++){
q->next[j]=NULL;
}
p->next[num]=q;
p=p->next[num];
}else {
p=p->next[num];
p->v++;
}
}
} int Query(char *s){
int len = strlen(s);
Trie *p=&root;
for(int i=0;i<len;i++){
int num=s[i]-'0';
if(p->next[num]==NULL){
return 0;
}
else{
p=p->next[num];
}
}
int v=p->v;
return v;
} char s[10005][20];
int n,T;
int main(){
cin>>T;
while(T--){
memset(s,0);
for(int i=0; i<11; i++)root.next[i]=NULL;
cin>>n;
int ans=0;
for(int i=0;i<n;i++){
cin>>s[i];
Build(s[i]);
}
for(int i=0;i<n;i++){
ans+=Query(s[i])-1;
}
if(ans>0)puts("NO");
else puts("YES");
}
return 0;
} /**********************************************************************
Problem: 1886
User: HDmaxfun
Language: C++
Result: AC
Time:304 ms
Memory:114092 kb
**********************************************************************/

  树状数组:

#include "cstdio"
#include "cstring"
#include "string"
#include "iostream"
#include "algorithm"
using namespace std; #define memset(x,y) memset(x,y,sizeof(x)) struct Trie {
int v;
int next[11];
void init() {
memset(next,-1);
v=1;
}
} dir[100005]; int tot;
void Build(char s[]) {
int len = strlen(s);
int now=0;
for(int i=0; i<len; i++) {
int num=s[i]-'0';
if(dir[now].next[num]==-1) {
tot++;
dir[tot].init();
dir[now].next[num]=tot;
now=dir[now].next[num];
} else {
now=dir[now].next[num];
dir[now].v++;
}
}
} int Query(char s[]) {
int len = strlen(s);
int now=0;
for(int i=0; i<len; i++) {
int num=s[i]-'0';
//cout <<num;
if(dir[now].next[num]==-1) return 0;
else now=dir[now].next[num];
}
return dir[now].v;
} char s[10005][20];
int n,T;
int main() {
cin>>T;
while(T--) {
memset(s,0);
memset(dir,0);
tot=0;
dir[0].init();
cin>>n;
int ans=0;
for(int i=0; i<n; i++) {
cin>>s[i];
Build(s[i]);
}
for(int i=0; i<n; i++) { ans+=Query(s[i])-1;
// puts("");
//cout <<s[i]<<" "<<ans<<endl;
}
if(ans>0)puts("NO");
else puts("YES");
}
return 0;
}

  set:

#include "cstdio"
#include "string"
#include "cstring"
#include "iostream"
#include "algorithm"
#include "cmath"
#include "set"
using namespace std;
#define memset(x,y) memset(x,y,sizeof(x)) const int MX = 1e4 + 5; string a[MX]; set <string> st; int main() {
int T,n;
char s[15];
cin>>T;
while(T--) {
scanf("%d",&n);
st.clear();
int ans=true;
for(int i=0; i<n; i++)scanf("%s",s),a[i]=string(s);
sort(a,a+n);
for(int i=n-1; i>=0; i--) {
if(st.find(a[i])!=st.end()){
ans=false;
break;
}
string tem="";
int len=a[i].length();
for(int j=0;j<len;j++){
tem+=a[i][j]; //string 居然可以直接添加字符,涨知识了。网上查了一下,string是一种类对象,可以直接用 +"xxx"将xxx直接接在前一个对象尾部。
st.insert(tem);
}
}
puts(ans?"YES":"NO");
}
return 0;
} //我一开始一直在一个个字符的添加成串,再转到set里面,这种方法卡时间又卡这么厉害,之前没过也是必然了。。 /**********************************************************************
Problem: 1886
User: HDmaxfun
Language: C++
Result: AC
Time:972 ms
Memory:7460 kb
**********************************************************************/

  


Phone List 字典树 OR STL的更多相关文章

  1. HDU 1800 Flying to the Mars 字典树,STL中的map ,哈希树

    http://acm.hdu.edu.cn/showproblem.php?pid=1800 字典树 #include<iostream> #include<string.h> ...

  2. STL MAP及字典树在关键字统计中的性能分析

    转载请注明出处:http://blog.csdn.net/mxway/article/details/21321541 在搜索引擎在通常会对关键字出现的次数进行统计,这篇文章分析下使用C++ STL中 ...

  3. Organize Your Train part II 字典树(此题专卡STL)

    Organize Your Train part II Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8787   Acce ...

  4. stl应用(map)或字典树(有点东西)

    M - Violet Snow Gym - 101350M Every year, an elephant qualifies to the Arab Collegiate Programming C ...

  5. hdu 1251 字典树的应用

    这道题看了大神的模板,直接用字典树提交的会爆内存,用stl 里的map有简单有快 #include <iostream> #include <map> #include < ...

  6. hdu2072 字典树

    这题印象深刻,我刚接触acm时,以为这题是水题(因为是中文,又短),一直没做出.现再想想也是.可能也是我以前字符串掌握不好: 这题其实也可以用stl里的map写.这里我用字典树写的.其实这题算简单题了 ...

  7. C++ TrieTree(字典树)容器的实现

    最近研究了一下C++线程池,在网上看了一下别人的代码,写的很不错,参见:http://www.cnblogs.com/lidabo/p/3328646.html 其中,他用了STL的set容器管理线程 ...

  8. 『字典树 trie』

    字典树 (trie) 字典树,又名\(trie\)树,是一种用于实现字符串快速检索的树形数据结构.核心思想为利用若干字符串的公共前缀来节约储存空间以及实现快速检索. \(trie\)树可以在\(O(( ...

  9. Trie(字典树)解析及其在编程竞赛中的典型应用举例

    摘要: 本文主要讲解了Trie的基本思想和原理,实现了几种常见的Trie构造方法,着重讲解Trie在编程竞赛中的一些典型应用. 什么是Trie? 如何构建一个Trie? Trie在编程竞赛中的典型应用 ...

随机推荐

  1. Redis protocol (redis通信协议)

    以前只会用redis -cli客户端, 或者在java程序里使用jedis来作为介质与redis服务器通信.这两天正好在实习中接触了一点这方面的内容. 五一放假就稍微翻了翻redis相关资料. 本篇博 ...

  2. redis发布/订阅

    发布订阅简介 Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息,消息之间通过channel传递. 准备工作 两台安装了redis的机器(虚拟 ...

  3. [物理学与PDEs]第1章习题8 磁场分布 $\ra$ 电流分布

    设在真空中有一圆柱形磁场 $$\bex B(P)=\sedd{\ba{ll} \cfrac{2I}{Cr},&r\geq R,\\ \cfrac{2I}{CR^2}r,&r<R, ...

  4. EffectiveC++ 第5章 实现

    我根据自己的理解,对原文的精华部分进行了提炼,并在一些难以理解的地方加上了自己的"可能比较准确"的「翻译」. Chapter 5 实现 Implementations 适当提出属于 ...

  5. NTFS权限笔记 2017-12-4

    NTFS权限:(文件或文件夹右键属性--安全--ACL) 1.文件系统类型: NTFS:支持单个文件大于4个G,支持文件权限设置 FAT32:不支持单个文件大于4G,不支持文件权限设置 2.取消权限继 ...

  6. windows bat 脚本(一)切换当前目录

    一.切换当前目录 现在桌面新建一个文件, 然后打开输入 cmd /k "cd /d D:\file"    如下图点击“另存为”,保存类型选择 “所有文件” 然后会在保存路径下发现 ...

  7. 第三周 数据分析之概要 Pandas库入门

    Pandas库介绍: Pandas库引用:Pandas是Python第三方库,提供高性能易用数据类型和分析工具 import pandas as pd Pandas基于NumPy实现,常与NumPy和 ...

  8. 【原创】大数据基础之Kafka(1)简介、安装及使用

    kafka2.0 http://kafka.apache.org 一 简介 Kafka® is used for building real-time data pipelines and strea ...

  9. C#+EntityFramework编程方式详细之Code First 数据迁移

    在前几篇的C#+EntityFramework编程方式中介绍了C#+EntityFramework编程方式Code First ,Model First以及Dtatabase First 等编程方式, ...

  10. Java_运算符

    目录 一.算术运算符 二.关系运算符 三.位运算符 四.赋值运算符 五.条件运算符 六.instanceof 运算符 七.逻辑运算符 一.算术运算符 加 减 乘 除 取余 自增 自减(+ - * / ...