Phone List 字典树 OR STL

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写就行了。我后面试这写了一下,但是一直超时,各种优化实在出不来,问了下学长,了解了新操作,涨知识了了。

Phone List   字典树 OR  STL

第一个是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
**********************************************************************/

  


上一篇:Linux学习之CentOS(二十二)--单用户模式下修改Root用户的密码


下一篇:【连接查询】mySql多表连接查询与union与union all用法