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
**********************************************************************/
- HDU 1800 Flying to the Mars 字典树,STL中的map ,哈希树
http://acm.hdu.edu.cn/showproblem.php?pid=1800 字典树 #include<iostream> #include<string.h> ...
- STL MAP及字典树在关键字统计中的性能分析
转载请注明出处:http://blog.csdn.net/mxway/article/details/21321541 在搜索引擎在通常会对关键字出现的次数进行统计,这篇文章分析下使用C++ STL中 ...
- Organize Your Train part II 字典树(此题专卡STL)
Organize Your Train part II Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8787 Acce ...
- stl应用(map)或字典树(有点东西)
M - Violet Snow Gym - 101350M Every year, an elephant qualifies to the Arab Collegiate Programming C ...
- hdu 1251 字典树的应用
这道题看了大神的模板,直接用字典树提交的会爆内存,用stl 里的map有简单有快 #include <iostream> #include <map> #include < ...
- hdu2072 字典树
这题印象深刻,我刚接触acm时,以为这题是水题(因为是中文,又短),一直没做出.现再想想也是.可能也是我以前字符串掌握不好: 这题其实也可以用stl里的map写.这里我用字典树写的.其实这题算简单题了 ...
- C++ TrieTree(字典树)容器的实现
最近研究了一下C++线程池,在网上看了一下别人的代码,写的很不错,参见:http://www.cnblogs.com/lidabo/p/3328646.html 其中,他用了STL的set容器管理线程 ...
- 『字典树 trie』
字典树 (trie) 字典树,又名\(trie\)树,是一种用于实现字符串快速检索的树形数据结构.核心思想为利用若干字符串的公共前缀来节约储存空间以及实现快速检索. \(trie\)树可以在\(O(( ...
- Trie(字典树)解析及其在编程竞赛中的典型应用举例
摘要: 本文主要讲解了Trie的基本思想和原理,实现了几种常见的Trie构造方法,着重讲解Trie在编程竞赛中的一些典型应用. 什么是Trie? 如何构建一个Trie? Trie在编程竞赛中的典型应用 ...
随机推荐
- LeetCode刷题(Java)
第一题 class Solution { public int[] twoSum(int[] nums, int target) { Map<Integer, Integer> map = ...
- pip换源安装
pip install --index-url https://pypi.tuna.tsinghua.edu.cn/simple 要安装的 有些工具安装太慢, 换源安装一下, 速度一下子飞起
- Coroutine的原理以及实现
最近在写WinForm,在UI界面需要用到异步的操作,比如加载数据的同时刷系进度条,WinForm提供了不少多线程的操作, 但是多线程里,无法直接修改主线程里添加的UI的get/set属性访问器(可以 ...
- Contest2156 - 2019-3-7 高一noip基础知识点 测试2 题解版
传送门 预计得分:100+70+100+50=320 实际得分100+63+77+30=270 Ctrl_C+Ctrl_V时不要粘贴翻译的,直接粘原文, In a single line of the ...
- ue4 材质表达式分类
绿色节点 颜色 Color Desaturation 数学 Math GO 字体 Font FontSample,FontSampleParameter 实用程序 Utility 常用: Desatu ...
- sql server 2008 中的 server profiler 的简单使用
server profiler 是一个SQL server的 数据库执行语句的监控工具. 登录你需要监控的数据库. 2 .设置要监控进程的PID. 3.设置监控的数据库. 4 . 最后点击运行 就可以 ...
- for 循环 与forEach 里面return 的区别
for 循环里面 return 可以直接终止 跳出 循环 forEach 是中断本次循环 直接 下一个循环 forEach想要取到值之后 直接跳出循环 可以用 try catch let arr = ...
- 在 VsCode 中自定义代码补全
前言 之前公司的 Vscode 折腾成功过,如今给自己家装一个忘记怎么定义了,故回忆一下写个博文记录 代码补全顾名思义就是输入一两个字母自动提示相关的联想操作,由于VsCode非常精简所以很多联想没有 ...
- ionic3 打包 混淆代码
ionic3 项目中遇到安全漏洞 解决办法: https://www.npmjs.com/package/ionic-voricles-obfuscate 安装插件 cordova plugin ad ...
- CSS之文本
文本对齐方式 text-align left 把文本排列到左边. 默认值:由浏览器决定. right 把文本排列到右边. center 把文本排列到中间. justify 实现两端对齐文本效果. in ...