题目链接:http://poj.org/problem?id=3630

题意:给你多个字符串,如果其中任意两个字符串满足一个是另一个的前缀,那么输出NO,否则输出YES

思路:简单的trie树应用,插入的过程中维护到当前节点是不是字符串这个布尔量即可,同时判断是否存在上述情况。

code:

 #include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
using namespace std; const int KIND = ;
const int MAXN = ;
struct trie
{
bool isString; // 标志到当前节点是否是字符串
trie* next[KIND];
trie()
{
isString = false;
for (int i = ; i < KIND; ++i) next[i] = NULL;
}
}; trie node[MAXN];
trie* root;
bool flag;
int k; void Insert(string ss)
{
trie* temp = root;
int len = ss.size();
for (int i = ; i < len; ++i)
{
int curr = ss[i] - '';
if (temp->next[curr] != NULL) // 判断前缀在前面出现的情况
{
if (temp->next[curr]->isString)
{
flag = false;
return;
}
}
else temp->next[curr] = &node[k++];
temp = temp->next[curr];
}
temp->isString = true;
for (int i = ; i < KIND; ++i) // 判断前缀在后面出现的情况
{
if (temp->next[i])
{
flag = false;
return;
}
}
} int main()
{
int nCase;
cin >> nCase;
while (nCase--)
{
flag = true;
k = ;
memset(node, , sizeof(node));
root = &node[]; int n;
cin >> n; string str;
for (int i = ; i < n; ++i)
{
cin >> str;
if (flag) Insert(str);
}
if (flag) cout << "YES" << endl;
else cout << "NO" << endl;
}
return ;
}

POJ 3630 Phone List(trie树的简单应用)的更多相关文章

  1. poj 3630 Phone List trie树

    Phone List Description Given a list of phone numbers, determine if it is consistent in the sense tha ...

  2. POJ 3630 Phone List | Trie 树

    题目: 给定 n 个长度不超过 10 的数字串,问其中是否存在两个数字串 S, T ,使得 S 是 T 的前缀.多组数据,数据组数不超过 40. 题解: 前缀问题一般都用Trie树解决: 所以跑一个T ...

  3. poj 2513 Colored Sticks (trie 树)

    链接:poj 2513 题意:给定一些木棒.木棒两端都涂上颜色,不同木棒相接的一边必须是 同样的颜色.求能否将木棒首尾相接.连成一条直线. 分析:能够用欧拉路的思想来解,将木棒的每一端都看成一个结点 ...

  4. [ACM] POJ 2418 Hardwood Species (Trie树或map)

    Hardwood Species Time Limit: 10000MS   Memory Limit: 65536K Total Submissions: 17986   Accepted: 713 ...

  5. [POJ 1204]Word Puzzles(Trie树暴搜&amp;AC自己主动机)

    Description Word puzzles are usually simple and very entertaining for all ages. They are so entertai ...

  6. poj 3630 Phone List(字典树)

    题目链接: http://poj.org/problem?id=3630 思路分析: 求在字符串中是否存在某个字符串为另一字符串的前缀: 即对于某个字符串而言,其是否为某个字符串的前缀,或存在某个其先 ...

  7. poj 2513 Colored Sticks trie树+欧拉图+并查集

    点击打开链接 Colored Sticks Time Limit: 5000MS   Memory Limit: 128000K Total Submissions: 27955   Accepted ...

  8. hdu 1251 统计难题(trie 树的简单应用)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1251 题意:给你多个字符串,求以某个字符串为前缀的字符串数量. 思路:简单的trie数应用,在trie ...

  9. POJ 3630 Phone List Trie题解

    Trie的应用题目. 本题有两个难点了: 1 动态建立Trie会超时,须要静态建立数组,然后构造树 2 推断的时候注意两种情况: 1) Tire树有133,然后插入13333556的时候.2)插入顺序 ...

随机推荐

  1. Jimmy Choo_百度百科

    Jimmy Choo_百度百科 Jimmy Choo

  2. Android 启动Activity的方式

    Activity的启动分为两种方式,显示方式和隐式方式,显示方式就是在通过intent启动Activity时指定了Activity的包名和类名. 而隐式方式则在初始化Intent时仅仅指定action ...

  3. md笔记——编程术语

    thinkPython 读书笔记 本列表根据thinkPython中记录的大量编程术语 整理而来. 该书的重点不是教会你Python,而是培养读者用计算机科学家一样的思路来思考,设计,开发. 讲解了语 ...

  4. 锁·——lock关键字详解

    作  者:刘铁猛 日  期:2005-12-25 关键字:lock 多线程 同步 小序 锁者,lock关键字也.市面上的书虽然多,但仔细介绍这个keyword的书太少了.MSDN里有,但所给的代码非常 ...

  5. BZOJ 3207: 花神的嘲讽计划Ⅰ( hash + 可持久化线段树 )

    O(NK)暴力搞出所有子串的哈希值, 然后就对哈希值离散化建权值线段树, 就是主席树的经典做法了.总时间复杂度O(NK+(N+Q)logN) ----------------------------- ...

  6. 我用过的Linux命令之chmod

    chmod命令用于改变linux系统文件或目录的访问权限.用它控制文件或目录的访问权限.该命令有两种用法.一种是包含字母和操作符表达式的文字设定法:另一种是包含数字的数字设定法. Linux系统中的每 ...

  7. ROS服务的理解

    服务是节点之间通信的另一种方式,服务允许节点发起一个请求和接收一个响应. 打开终端在里面输入: roscore 查看当前的运行节点: rosnode list 返回结果: /rosout 查看当前的运 ...

  8. Linux学习之Center os网络配置

    首先介绍一下VMware的网络连接方式.我们的主机通常经过物理网卡与局域网和Internet相连接,而虚拟机既已被称之为虚拟计算机,那虚拟网卡也必然存在,而如果我们想让虚拟计算机能连接到局域网或者In ...

  9. 2)PHP中把读取.txt中内容并转为UTF-8格式

    <?php $filename = "filename.txt"; $handle = fopen($filename, "r");//读取二进制文件时, ...

  10. phpcms新增栏目字段_phpcms添加栏目属性

    先做个广告 WEB网站开发 APP后台开发 安卓开发 物流系统 时时彩系统开发 电商系统开发 微信开发 请联系我 QQ 13266112 or 184377367 phpcms新增栏目字段_phpcm ...