Tire树裸题,一开始写动态的字典树,然后TLE,每次new一个新节点耗费时间较多。后来改成数组模拟的。

//#include <bits/stdc++.h>
#include <cstdio>
#include <cstring>
#include <algorithm> using namespace std ;
const int maxN = ; struct stringStruct {
char str[ ] ;
int len ;
}ss[ maxN ] ; struct tireNode {
int cnt ;
bool last ;
struct tireNode *next[ ] ;
tireNode ( ) {
cnt = ;
last = false;
memset ( next , , sizeof ( next ) ) ;
}
}; bool cmp ( stringStruct a , stringStruct b ) {
return a.len < b.len ;
} bool insert ( tireNode *root , char str[ ] ) {
int len = strlen ( str ) ;
tireNode *cur = root ; for ( int i= ; i<len ; ++i ) {
char ch = str[ i ] - '' ;
if ( cur -> next[ ch ] == NULL ) {
tireNode* newNode = new tireNode ;
cur -> next[ ch ] = newNode ;
}
if ( cur -> last ) return true ;
cur = cur -> next[ ch ] ;
cur->cnt++ ;
}
cur -> last = true ;
return false ;
} int main ( ) {
int T ;
for ( scanf( "%d" , &T ) ; T ; --T ) {
tireNode* root = new tireNode ;
int N ;
scanf ( "%d\n" , &N ) ;
for ( int i= ; i<=N ; ++i ) {
char ch = getchar ( ) ;
int lenn = ;
while ( ch != '\n' ) {
ss[ i ].str[ lenn++ ] = ch ;
ch = getchar ( ) ;
}
ss[ i ].len = lenn ;
}
sort ( ss + , ss + N + , cmp ) ;
bool flag = true ;
for ( int i= ; i<=N ; ++i ) {
if ( insert ( root , ss[ i ].str ) ) {
flag = false ;
break ;
}
}
if ( flag ) printf ( "YES\n" ) ;
else printf ( "NO\n" ) ;
}
return ;
}

TLE动态字典树

#include <cstdio>
#include <algorithm>
#include <cstring> using namespace std ;
const int maxN = ;
typedef long long LL ; struct stringStruct {
char str[ ] ;
int len ;
}ss[ maxN ] ; int trie[ maxN ][ ] ;
bool end[ maxN ] ;
bool cmp ( stringStruct a , stringStruct b ) {
return a.len < b.len ;
} int _cnt ; bool insert ( char str[ ] ) {
int cur = , len = strlen ( str + ) ;
for ( int i= ; i<=len ; ++i ) {
int ch = str[ i ] - '' ;
if ( !trie[ cur ][ ch ] )
trie[ cur ][ ch ] = ++_cnt ;
if ( end[ cur ] ) return true ;
cur = trie[ cur ][ ch ] ;
}
end[ cur ] = true ;
return false ;
} int main ( ) {
int T , N ;
for ( scanf ( "%d" , &T ) ; T ; --T ) {
memset ( trie , , sizeof ( trie ) ) ;
memset ( end , false , sizeof ( end ) ) ;
_cnt = ;
scanf ( "%d" , &N ) ;
for ( int i= ; i<=N ; ++i ) {
scanf ( "%s" , ss[ i ].str + ) ;
ss[ i ].len = strlen ( ss[ i ].str + ) ;
}
sort ( ss + , ss + N + , cmp ) ;
bool flag = true ;
for ( int i= ; i<=N ; ++i ) {
if ( insert ( ss[ i ].str ) ) {
flag = false ;
break ;
}
}
if ( flag )printf ( "YES\n" ) ;
else printf ( "NO\n" ) ;
}
return ;
}

AC数组模拟

POJ3630的更多相关文章

  1. POJ--1056 IMMEDIATE DECODABILITY && POJ--3630 Phone List(字典树)

    题目链接 题目大意 看输入的每个字符串中是否有一个字符串是另一个字符串的前缀 #include<iostream> #include<cstring> #include< ...

  2. POJ1056 IMMEDIATE DECODABILITY & POJ3630 Phone List

    题目来源:http://poj.org/problem?id=1056   http://poj.org/problem?id=3630 两题非常类似,所以在这里一并做了. 1056题目大意: 如果一 ...

  3. POJ3630/HDU-1671 Phone List,字典树静态建树!

    Phone List POJ动态建树TLE了~~~ 题意:拨打某个电话时可能会因为和其他电话号码的前几位重复而导致错误,现在给出一张电话单,求是否有某个电话是其他电话的前缀.是则输出NO,否则输出YE ...

  4. Phone List POJ-3630 字典树 or 暴力

    Phone List POJ-3630 字典树 or 暴力 题意 目前有 t 组数据, n 个电话号码,如果拨打号码的时候 先拨通了某个号码,那么这一串号码就无法全部拨通. 举个例子 911 和 91 ...

  5. HihoCoder第二周与POJ3630:Trie树的建立

    这又是两道一样的题,都是建立trie树的过程. HihoCoder第二周: 这里其实逻辑都很简单,主要在于数据结构struct的使用. #include <iostream> #inclu ...

  6. hdu杭电1671 / poj3630 字典树

    传送门 题意:输入n串数字 找出是否有存在串的前缀与另一个串相同 如果存在 输出NO否则输出YES 思路:用字典树解决 标记字典树总串的结尾 查找出一个串内部是否有被标记的节点 如果有那么说明存在前缀 ...

  7. POJ3630——简单Trie树

    这个题的意思是说,给出一些字符串,判断是否有字符串是另一个字符串的前缀,当然可以用排序水过,不过这个题拿来练习一下Trie树不错. 这个题在poj的discuss上好多人说必须要静态建树,估计都是用了 ...

  8. [POJ3630]Phone List (Tire)

    题意 trie字典树模板 LOJ有中文翻译https://loj.ac/problem/10049 思路 TIRE 代码 之前在LOJ上做过 直接交了 #include<cstdio> # ...

  9. poj3630 Phone List

    spy on一下,发现是trie裸题,结果一交就T... 然后把cin改成scanf就A了... trie的空间一定要开足,要不然RE #include <cstdio> #include ...

随机推荐

  1. BUAA-OO-电梯调度

    BUAA-OO-电梯调度 1.设计策略 需求分析 设计一个系统,使其可以根据乘客的当前楼层和目的楼层,为乘客分配电梯资源并运送其至目的楼层. 自顶向下 根据需求,可以将整个系统分成三个部分: 处理乘客 ...

  2. 关于JDK1.7+中HashMap对红黑树场景的思考

    背景 在1.7之前的版本,当数组元素较多(几百.几千,或者更多)的时候,在这种前提扩容,涉及全量元素的遍历和坐标的重新定位,这个耗时会比较长.这是之前存在的一个弊端吧.那么引入红黑树之后就解决了问题, ...

  3. linux服务器磁盘挂载操作

    具体操作是:先对磁盘进行格式化,格式化后挂载到需要的挂载点,最后添加分区启动表,以便下次系统启动随机自动挂载.1.首先查看系统中磁盘信息,命令为:fdisk -l; 2.找到未使用的磁盘,对其进行格式 ...

  4. word20170102日用家电 household appliances

    1. Vacuum cleaner: 吸尘器 2.Cordless vacuum cleaner: 无线吸尘器 3.Robotic vacuum cleaner: 机器人吸尘器 动词:to vacuu ...

  5. Redis缓存穿透和缓存雪崩以及解决方案

    Redis缓存穿透和缓存雪崩以及解决方案 Redis缓存穿透和缓存雪崩以及解决方案缓存穿透解决方案布隆过滤缓存空对象比较缓存雪崩解决方案保证缓存层服务高可用性依赖隔离组件为后端限流并降级数据预热缓存并 ...

  6. MySQL5.7开启独立表空间参数innodb_file_per_table【原创】

    今天在线上某个系统发现MySQL数据库使用的是共享表空间,想修改为独立表空间,操作如下: #因为是主从结构,在从库修改测试,先关闭binlog SET SQL_LOG_BIN=; show varia ...

  7. SSH整合 pom.xml

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  8. 2142: 逛超市(zznuoj)

    2142: 逛超市 时间限制: 1 Sec  内存限制: 128 MB提交: 82  解决: 43[提交] [状态] [讨论版] [命题人:admin] 题目描述 “别人总说我瓜,其实我一点也不瓜,大 ...

  9. struts2-第一章-基础用法2

    一,回顾 struts2框架搭建步骤 (1)创建maven项目 (2)web.xml配置struts2的核心过滤器(filter) (3)pom.xml配置servlet,struts的依赖 (4)把 ...

  10. 2018-2019-2 20165206《网络对抗技术》Exp1 PC平台逆向破解

    - 2018-2019-2 20165206<网络对抗技术>Exp1 PC平台逆向破解 - 实验任务 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:mai ...