这道题也是一道找前缀的问题,很自然地要用到Trie树,但是如果用动态Trie树(即用指针开辟内存)的话,虽然在HDU上可以过(可能是HDU的数据比较水),但在POJ上会TLE , 所以这道题只能用静态Trie树。

实现过程如下:

#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<queue>
#define mem(a , b) memset(a , b , sizeof(a))
using namespace std ;
const int MAXN = 1e5 + 5 ;
struct Tnode
{
int count ; // 记录该点是否存在单词
int next[15] ;
Tnode()
{
mem(next , 0) ;
count = 0 ;
}
} TT[MAXN] ;
int pan ; // 判断标记
char s[20] ;
int cnt ; // 序号变量
void inse(char *str)
{
int p = 0 ; // 0 为根节点
int id ;
while (*str)
{
id = *str - '0' ;
if(TT[p].next[id] == 0)
{
TT[p].next[id] = ++ cnt ;
}
p = TT[p].next[id] ;
if(TT[p].count > 0) // 此处判断是否有其他字符串 是 当前字符串 str 的前缀
{
pan = 1 ;
}
++ str ;
}
int i ;
for(i = 0 ; i < 15 ; i ++) // 此处判断 当前字符串str 是否是其他字符串的前缀
{
if(TT[p].next[i] > 0)
{
pan = 1 ;
return ;
}
}
if(TT[p].count == 0)
TT[p].count ++ ;
}
void dele() // 清空原来的结点
{
int i ;
for( i = 0 ; i < MAXN ; i ++)
{
mem(TT[i].next , 0) ;
TT[i].count = 0 ; // 注意此处, 千万不要忘记 !!
}
}
int main()
{
int T ;
scanf("%d" , &T) ;
while (T --)
{
int n ;
scanf("%d" , &n) ;
pan = 0 ;
cnt = 0 ;
while (n --)
{
scanf("%s" , s) ;
inse(s) ;
}
if(pan == 1)
puts("NO") ;
else
puts("YES") ;
dele() ; // 清空
}
return 0 ;
}

POJ 3630 , HDU 1671 Phone List - from lanshui_Yang的更多相关文章

  1. POJ 2104&HDU 2665 Kth number(主席树入门+离散化)

    K-th Number Time Limit: 20000MS   Memory Limit: 65536K Total Submissions: 50247   Accepted: 17101 Ca ...

  2. HDU 1671 Phone List(Trie的应用与内存释放)

    Phone List Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  3. poj 1251 poj 1258 hdu 1863 poj 1287 poj 2421 hdu 1233 最小生成树模板题

    poj 1251  && hdu 1301 Sample Input 9 //n 结点数A 2 B 12 I 25B 3 C 10 H 40 I 8C 2 D 18 G 55D 1 E ...

  4. Eight POJ - 1077 HDU - 1043 八数码

    Eight POJ - 1077 HDU - 1043 八数码问题.用hash(康托展开)判重 bfs(TLE) #include<cstdio> #include<iostream ...

  5. hdu 1671 Phone List 字典树

    // hdu 1671 Phone List 字典树 // // 题目大意: // // 有一些电话号码的字符串长度最多是10,问是否存在字符串是其它字符串的前缀 // // // 解题思路: // ...

  6. POJ 1177/HDU 1828 picture 线段树+离散化+扫描线 轮廓周长计算

    求n个图矩形放下来,有的重合有些重合一部分有些没重合,求最后总的不规则图型的轮廓长度. 我的做法是对x进行一遍扫描线,再对y做一遍同样的扫描线,相加即可.因为最后的轮廓必定是由不重合的线段长度组成的, ...

  7. HDU 1671 Phone List(POJ 3630)

    Phone List Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  8. hdu 1671&& poj 3630 (trie 树应用)

    Phone List Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 25280   Accepted: 7678 Descr ...

  9. POJ 1325、ZOJ 1364、HDU 1150 Machine Schedule - from lanshui_Yang

    Problem Description As we all know, machine scheduling is a very classical problem in computer scien ...

随机推荐

  1. python_基本语法_01

    离毕业工作还有几个月,本来想早点去公司实习,无奈gb学校不给放.好吧,既然这样,就学门语言. 参考与 http://www.cnblogs.com/vamei ,我是跟着这位博客牛人的博客教程学的,具 ...

  2. cf B. Fox Dividing Cheese

    http://codeforces.com/contest/371/problem/B #include <cstdio> #include <iostream> #inclu ...

  3. QQ登录-第三方SDK的接入总结(搜索 qq互联)

    由于项目的需要,使用了[QQ登录]SDK 的相关功能!   1.集成[QQ登录]SDK   [QQ登录]SDK下载地址: http://wiki.open.qq.com/wiki/website/SD ...

  4. Activity的各种功能封装

    Activity全屏.隐藏系统标题栏.设置屏幕方向.Activity跳转等功能 /** * Copyright (C) 2012 TookitForAndroid Project * * Licens ...

  5. 8.2.1.13 Multi-Range Read Optimization 多个range 读优化

    8.2.1.13 Multi-Range Read Optimization 多个range 读优化 读记录使用一个range scan 在一个secondary index 可以导致很多的随机磁盘访 ...

  6. 【转】一个FAE(AE)的体会和大家交流

    原文网址:http://www.52rd.com/bbs/dispbbs.asp?boardID=63&ID=228682 本人在国内某芯片设计公司工作近5年时间岗位是AE和FAE,两个工作量 ...

  7. 鼠标点击DIV后,DIV的背景变色(js)

    <!DOCTYPE html> <html> <head> <script> window.onload = function(){ var divs ...

  8. [置顶] NO.4 使用预处理器进行调试

    <c++ primer>第四版 p190 ************************************************************************* ...

  9. Android 中文 API (40) —— RatingBar

    Android 中文 API (40) —— RatingBar 前言 本章内容是 android.widget.RatingBar,译为"评分条",版本为Android 2.2 ...

  10. qt 实现钟表图标

    #include "clock.h" CLOCK::CLOCK(QWidget *parent) : QWidget(parent) { QTimer *timer = new Q ...