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. Vue(小案例_vue+axios仿手机app)_公共组件(路由组件传参)

    一.前言                    1.公共轮播图的实现                    2.组件传参,公共组件的实现 二.主要内容 1.公共轮播图的实现 (1)分析:当渲染不同的轮 ...

  2. CMDB资产管理系统开发【day25】:Django 自定义用户认证

    官方文档:https://docs.djangoproject.com/en/1.10/topics/auth/customizing/#substituting-a-custom-user-mode ...

  3. Python通过分页对数据进行展示

    # 通过分页对数据进行展示 """ 要求: 每页显示10条数据 让用户输入要查看的页面:页码 """ USER_LIST = [] for ...

  4. Spring MVC 使用问题与解决--HTTP Status 500 - Servlet.init() for servlet springmvc threw exception

    1.HTTP Status 500 - Servlet.init() for servlet springmvc threw exception 解决 使用jre1.7 Spring4.3 2.spr ...

  5. 【搞事情】VS2015下的openGL初始化

    环境:glfw+glew+visual studio 2015 原材料下载链接: glfw 下载 glew 下载 glm库 下载 cmake 下载 (我下载的时候有些官网戳不开(大概校园网问题)... ...

  6. openwrt 加入nand flash的支持

    参考链接 :   https://blog.csdn.net/wwx0715/article/details/77189456?locationNum=9&fps=1

  7. Java基础10-集合

    作业回顾 蜜蜂和熊的生产消费关系,熊在蜂蜜满10斤吃掉.蜜蜂一次生产一斤蜂蜜,且蜜蜂生成一斤蜂蜜花费的时间是10s. 十只蜜蜂和两只熊. 蜜蜂 bag: 20 每次产1,耗时10ms 满5的时候给蜜罐 ...

  8. Laravel 开发环境搭建 - Windows

    Laravel 开发环境搭建 - Windows  :   https://laravel-china.org/docs/laravel-development-environment/5.5/dev ...

  9. centos7环境下apache2.2.34的编译安装

    .获取apache2..34的源码包 http://archive.apache.org/dist/httpd/httpd-2.2.34.tar.gz .获取apache的编译参数 apache的编译 ...

  10. powerdesigner添加mysql的字符集支持

    一般建模可能都会用到:powerdesigner 但是,在建表的时候,我一直没有找到: DEFAULT CHARACTER SET COLLATE 两个选项.因此,想了个方法,点击:工具栏->d ...