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 ...
随机推荐
- import模块/包--软件开发规范
一. 模块 模块:就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. import加载的模块分为四个通用类别: 1 使用python编写的代码(.py文件) 2 已被编译 ...
- 主成分分析算法(PCA)
通过数据压缩(降维)可以减少特征数量,可以降低硬盘和内存的存储,加快算法的训练. 还可以把高维的数据压缩成二维或三维,这样方便做数据可视化. 数据压缩是通过相似或者相关度很高的特征来生成新的特征,减少 ...
- VGG16 ReNetInception network
VGG16就是运用很简单的2个filter s=2 f=2 的pool以及3x3 same padding的filter. 每pool一下以后 翻倍filter的depth Resnet就是跳级传播结 ...
- 「luogu2387」[NOI2014] 魔法森林
「luogu2387」[NOI2014] 魔法森林 题目大意 \(n\) 个点 \(m\) 条边的无向图,每条边上有两个权值 \(a,b\),求从 \(1\) 节点到 \(n\) 节点 \(max\{ ...
- 在Linux搭建Git服务器
搭建Git服务器 https://www.cnblogs.com/dee0912/p/5815267.html Git客户端的安装 https://www.cnblogs.com/xuwenjin/p ...
- MSYS 编译 nginx rtmp-module
1. 下载源码 http://hg.nginx.org/nginx nginx-c74904a17021.zip https://github.com/arut/nginx-rtmp-module n ...
- 删除Win10资源管理器中的3D对象/音乐/视频文件夹
Win10如何删除资源管理器中的3D对象/音乐/视频等文件夹?使用Win10系统的用户都知道,打开此电脑之后,资源管理上面会显示文档/音乐/视频等7个文件夹,一些用户认为很少使用到它们,想要除之而后快 ...
- caffe服务器搭建血泪记录
装过很多次caffe了,但这个还是遇到了很多奇葩问题,不过以前都是在ubuntu上,这次是在centos上. 1.import error _caffe.so: undefined symbol: ...
- C# 高级编程02----手动创建C#程序
在日常工作中使用C# 开发的时候,通常使用宇宙第一神器VS进行开发.为了了解编译过程,这里采用文本编辑器的方式编写一个C#程序 一.创建一个C#程序 1.使用记事本工具创建一个名为First.cs的文 ...
- QT安装后再添加或删除组件
QT安装目录下打开MaintenanerceTool.exe 手动添加储存库,要定位一个储存有QT在线安装镜像的网址: https://download.qt.io/online/qtsdkrepo ...