hdu 1671 Phone List Trie树
2016-04-23 00:32
513 查看
题意:给定一个字符串的集合,看是否存在一个字符串是另一个字符串的前缀
思路:直接上lrj的模板, 话说深感此模板强大,比动态分配简洁许多,就是耗内存多,细节看代码
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1671
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int n;
char s[20];
bool flag;
struct Trie
{
int ch[100000][15];
int val[100000];
int sz;
int id(char c)
{
return c - '0';
}
void init()
{
sz = 1;
memset(ch[0], 0, sizeof(ch[0]));
memset(val, 0,sizeof(val));
}
void Insert(const char *s)
{
int u = 0, len = strlen(s);
for(int i=0; i<len; i++)
{
int c = id(s[i]);
if(!ch[u][c])
{
memset(ch[sz], 0, sizeof(ch[sz]));
ch[u][c] = sz++;
val[u] = 0;
}
else
{
if(val[ch[u][c]] == 1) //之前的字符串是当前字符串的前缀
{
flag = false;
return ;
}
}
u = ch[u][c];
}
val[u] = 1;
for(int i=0; i<10; i++) //当前字符串是之前的字符串的前缀
if(ch[u][i]) flag = false;
}
};
Trie trie;
int main()
{
int t;
scanf("%d", &t);
while(t--)
{
scanf("%d", &n);
trie.init();
flag = true;
for(int i=0; i<n; i++)
{
scanf("%s", s);
if(flag)
trie.Insert(s);
}
if(flag)
puts("YES");
else
puts("NO");
}
return 0;
}
思路:直接上lrj的模板, 话说深感此模板强大,比动态分配简洁许多,就是耗内存多,细节看代码
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1671
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int n;
char s[20];
bool flag;
struct Trie
{
int ch[100000][15];
int val[100000];
int sz;
int id(char c)
{
return c - '0';
}
void init()
{
sz = 1;
memset(ch[0], 0, sizeof(ch[0]));
memset(val, 0,sizeof(val));
}
void Insert(const char *s)
{
int u = 0, len = strlen(s);
for(int i=0; i<len; i++)
{
int c = id(s[i]);
if(!ch[u][c])
{
memset(ch[sz], 0, sizeof(ch[sz]));
ch[u][c] = sz++;
val[u] = 0;
}
else
{
if(val[ch[u][c]] == 1) //之前的字符串是当前字符串的前缀
{
flag = false;
return ;
}
}
u = ch[u][c];
}
val[u] = 1;
for(int i=0; i<10; i++) //当前字符串是之前的字符串的前缀
if(ch[u][i]) flag = false;
}
};
Trie trie;
int main()
{
int t;
scanf("%d", &t);
while(t--)
{
scanf("%d", &n);
trie.init();
flag = true;
for(int i=0; i<n; i++)
{
scanf("%s", s);
if(flag)
trie.Insert(s);
}
if(flag)
puts("YES");
else
puts("NO");
}
return 0;
}
相关文章推荐
- 字典树的基本知识及使用C语言的相关实现
- Trie树_字典树(字符串排序)简介及实现
- POJ 1056 IMMEDIATE DECODABILITY
- 【51nod 6级题目】XOR key 问题
- Trie树与后缀树
- Problem A: ZZ买衣服
- hihoCoder第二周:Trie树
- codeforces content#260 D A Lot of Games
- sdutoj1500 Message Flood
- poj_2513
- hihocoder 1107 Shortest Proper Prefix
- hihocoder 1014 trie树
- 字典树
- poj 2503 trie树
- poj 1251 trie树
- poj 1057 trie树
- hdu 1800 trie树
- hdu 1671 trie树
- hdu 1257 trie树
- 【数据结构】Trie树