POJ3630
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的更多相关文章
- POJ--1056 IMMEDIATE DECODABILITY && POJ--3630 Phone List(字典树)
题目链接 题目大意 看输入的每个字符串中是否有一个字符串是另一个字符串的前缀 #include<iostream> #include<cstring> #include< ...
- POJ1056 IMMEDIATE DECODABILITY & POJ3630 Phone List
题目来源:http://poj.org/problem?id=1056 http://poj.org/problem?id=3630 两题非常类似,所以在这里一并做了. 1056题目大意: 如果一 ...
- POJ3630/HDU-1671 Phone List,字典树静态建树!
Phone List POJ动态建树TLE了~~~ 题意:拨打某个电话时可能会因为和其他电话号码的前几位重复而导致错误,现在给出一张电话单,求是否有某个电话是其他电话的前缀.是则输出NO,否则输出YE ...
- Phone List POJ-3630 字典树 or 暴力
Phone List POJ-3630 字典树 or 暴力 题意 目前有 t 组数据, n 个电话号码,如果拨打号码的时候 先拨通了某个号码,那么这一串号码就无法全部拨通. 举个例子 911 和 91 ...
- HihoCoder第二周与POJ3630:Trie树的建立
这又是两道一样的题,都是建立trie树的过程. HihoCoder第二周: 这里其实逻辑都很简单,主要在于数据结构struct的使用. #include <iostream> #inclu ...
- hdu杭电1671 / poj3630 字典树
传送门 题意:输入n串数字 找出是否有存在串的前缀与另一个串相同 如果存在 输出NO否则输出YES 思路:用字典树解决 标记字典树总串的结尾 查找出一个串内部是否有被标记的节点 如果有那么说明存在前缀 ...
- POJ3630——简单Trie树
这个题的意思是说,给出一些字符串,判断是否有字符串是另一个字符串的前缀,当然可以用排序水过,不过这个题拿来练习一下Trie树不错. 这个题在poj的discuss上好多人说必须要静态建树,估计都是用了 ...
- [POJ3630]Phone List (Tire)
题意 trie字典树模板 LOJ有中文翻译https://loj.ac/problem/10049 思路 TIRE 代码 之前在LOJ上做过 直接交了 #include<cstdio> # ...
- poj3630 Phone List
spy on一下,发现是trie裸题,结果一交就T... 然后把cin改成scanf就A了... trie的空间一定要开足,要不然RE #include <cstdio> #include ...
随机推荐
- hihocoder 1175
拓扑排序 hihocoder 1175 拓扑只适用于 有向无环图中,这个指的是 1.有向的,不是那种双向可走的 2.无环,并不是不存在环,而是一定要有一个没有其他点指向这个点的点, 题目大意:一个有向 ...
- BFS 模拟队列(水题)
BFS 这道题 觉得比较适合BFS新手入门写,也许大家都以为最入门 的BFS题是在二维图上搜索,但是这道题是线性搜索,更加简单 POJ 3278 Catch That Cow Time Limit: ...
- 【原创】大叔经验分享(50)hue访问mysql(librdbms)
cloudera manager安装hue后想开启访问mysql(librdbms)需要在这里配置(hue_safety_valve.ini) 添加配置如下 [librdbms] # The RDBM ...
- Tensorflow笔记二
MNIST手写体识别 (Mixed National Institute of Standards and Technology database)的28*28字符识别共0-9类. 在ipython命 ...
- curl常用命令备忘
#####(输出请求头信息) curl -I xxx-Pro:test xxx$ curl -I https://www.baidu.com/ HTTP/1.1 200 OK Accept-Range ...
- Centos7创建支持ssh服务的docker镜像
如何在centos7中使用docker创建一个支持ssh连接的容器 1.拉取centos7.4镜像(由于7.4目前是最稳定的版本,所以推荐使用centos7.4) docker pull centos ...
- 打造vim IDE
pathogen.vim:vim插件目录自动识别.加载(注意:能用pathogen.vim安装插件,就不要用Vundle.因为Vundle下载插件速度非常慢.) https://github.com/ ...
- Jenkins job之间依赖关系配置(联动构建)
使用场景: 想要在某APP打新包之后,立即执行自动化测试的job来验证该新包.比如Job A 执行完执行Job B ,如下图所示,如何建立依赖呢? 主要有两种方法: 1.配置上游依赖: 2.配置下游依 ...
- curl 查看一个web站点的响应时间
1. curl 查看web站点 curl -o /dev/null -s -w "time_namelookup:%{time_namelookup}s\ntime_connect:%{ti ...
- Java 并查集Union Find
对于一组数据,主要支持两种动作: union isConnected public interface UF { int getSize(); boolean isConnected(int p,in ...