博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 3630 Phone List [Trie]
阅读量:4324 次
发布时间:2019-06-06

本文共 2145 字,大约阅读时间需要 7 分钟。

判断是否有前缀...明显就是一个trie了...裸的不能再裸

注意用动态的trie额外分配内存的时候会TLE...所以就用静态的...

不过静态trie一开始还不太会用...不过后来感觉思路和静态邻接表感觉差不多...

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;//typedef long long LL;//typedef __int64 LL;//typedef long double DB;//typedef unisigned __int64 LL;//typedef unsigned long long ULL;#define EPS 1e-8#define MAXN 100005#define MAXE 300000#define INF 0x3f3f3f3f#define PI acos(-1.0)#define MOD 99991//#define MOD 99990001//#define MOD 1000000007#define max(a,b) ((a)>(b)?(a):(b))#define min(a,b) ((a)<(b)?(a):(b))#define max3(a,b,c) (max(max(a,b),c))#define min3(a,b,c) (min(min(a,b),c))#define mabs(a) ((a<0)?(-a):a)//#define L(t) (t << 1) //Left son t*2//#define R(t) (t << 1 | 1) //Right son t*2+1//#define Mid(a,b) ((a+b)>>1) //Get Mid//#define lowbit(a) (a&-a) //Get Lowbit//int gcd(int a,int b){return b?gcd(b,a%b):a;}//int lcm(int a,int b){return a*b/gcd(a,b);}//std::ios::sync_with_stdio(false);struct trie{ int next[10]; bool vis;}tree[MAXN];struct alpha{ int len ; char ch[11];}str[MAXN];int cnt,n,T,loc;bool judge;void insert(alpha s){ int now = 1,len = s.len; for(int i = 0 ; i < len ; i++) { int tmp = s.ch[i] - '0'; if(tree[now].next[tmp] == -1) { tree[now].next[tmp] = loc; if(i == len-1) tree[loc].vis = true; else tree[loc].vis = false; for(int j = 0 ; j < 10 ; j++) tree[loc].next[j] = -1; now = loc; loc++; }else { now = tree[now].next[tmp]; if(tree[now].vis || (i == len-1)) { judge = true; return; } } }}int main(){// freopen("in.txt","r",stdin);// freopen("out.txt","w",stdout); cin>>T; while(T--) { tree[1].vis = false; judge = false; loc = 2; for(int i = 0 ; i < 10 ; i++) tree[1].next[i] = -1; cin>>n; for(int i = 0 ; i < n ; i++) { scanf("%s",str[i].ch); str[i].len = strlen(str[i].ch); } for(int i = 0 ; i < n ; i++) { if(!judge) insert(str[i]); else break; } if(judge) cout<<"NO"<

转载于:https://www.cnblogs.com/Felix-F/archive/2013/04/23/3223624.html

你可能感兴趣的文章
ios开发证书,描述文件,bundle ID的关系
查看>>
jsp之简单的用户登录系统(纯jsp)
查看>>
js计时事件
查看>>
EntityFramework 学习 一 Eager Loading
查看>>
dispatch_set_target_queue测试
查看>>
自己写的sql排序
查看>>
关于Mutex的笔记
查看>>
凸包1——卷包裹算法
查看>>
Centos 安装SVN并配置多个版本库
查看>>
Eos持久化实体
查看>>
Shell基础-通配符
查看>>
static类型的变量
查看>>
SpringMVC之文件上传异常处理
查看>>
优先级
查看>>
rest_framework组件
查看>>
css position relative obsolution
查看>>
矩阵重叠面积计算 线段树hdu1542
查看>>
HTML命令
查看>>
SqlServer动态变换库名
查看>>
抓虫记之五:Webservice总是调用不了
查看>>