POJ 3630Phone List

题目连接:http://poj.org/problem?id=3630

题意:问是否有号码是其他号码的前缀。

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<map>
using namespace std;
const int N=1e5+;
struct Tire
{
int T[N][];
int sum[N];
int cou;
void init()
{
cou=;
memset(T,,sizeof(T));
memset(sum,,sizeof(sum));
}
void Insert(char *s)
{
int h=,i,n=strlen(s);
for(i=; i<n; i++)
{
if(T[h][s[i]-'']==)
T[h][s[i]-'']=cou++;
h=T[h][s[i]-''];
}
sum[h]++;
}
int ask(char *s)
{
int h=,i=,n=strlen(s);
for(i=; i<n-; i++)
{
if(T[h][s[i]-''])
{
h=T[h][s[i]-''];
if(sum[h]>) return ;
}
else return ;
}
return ;
}
} tire;
char s[][];
int main()
{
int i,T,n;
scanf("%d",&T);
while(T--)
{
int ans=;
scanf("%d",&n);
getchar();
tire.init();
for(i=; i<n; i++)
{
scanf("%s",s[i]);
getchar();
tire.Insert(s[i]);
}
for(i=; i<n; i++)
if(tire.ask(s[i])) ans=;
if(ans==) cout<<"NO"<<endl;
else cout<<"YES"<<endl;
}
return ;
}

POJ 3630

HDU 1251统计难题

题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1251

题意:统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀).

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=5e5+;
struct Tire
{
int T[N][],sum[N];
int cou;
void Init()
{
cou=;
memset(T,,sizeof(T));
memset(sum,,sizeof(sum));
}
void Insert(char *s)
{
int i,h=,n=strlen(s);
for(i=; i<n; i++)
{
if(T[h][s[i]-'a']==)
T[h][s[i]-'a']=cou++;
h=T[h][s[i]-'a'];
sum[h]++;
}
}
int ask(char *s)
{
int i,h=,n=strlen(s);
for(i=; i<n; i++)
{
if(T[h][s[i]-'a']!=) h=T[h][s[i]-'a'];
else return ;
}
return sum[h];
}
} tire;
int main()
{
char s[];
tire.Init();
while(gets(s))
{
if(strlen(s)==) break;
tire.Insert(s);
}
while(scanf("%s",s)!=EOF)
{
cout<<tire.ask(s)<<endl;
}
return ;
}

HDU 1251

HDU 1004Let the Balloon Rise

题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1004

题意:输出颜色数量最多的一种颜色。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=+;
struct Tire
{
int T[N][],sum[N];
int cou;
void Init()
{
cou=;
memset(T,,sizeof(T));
memset(sum,,sizeof(sum));
}
int Insert(char *s)
{
int i,h=,n=strlen(s);
for(i=; i<n; i++)
{
if(T[h][s[i]-'a']==)
T[h][s[i]-'a']=cou++;
h=T[h][s[i]-'a'];
}
sum[h]++;
return sum[h];
}
} tire;
int main()
{
int n;
char s[],ans[];
while(scanf("%d",&n)!=EOF)
{
if(n==) break;
tire.Init();
int Max=;
while(n--)
{
getchar();
scanf("%s",s);
int x=tire.Insert(s);
if(x>Max)
{
Max=x;
strcpy(ans,s);
}
}
printf("%s\n",ans);
}
return ;
}

HDU 1004

HDU 4825Xor Sum

题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=4825

题意:在集合当中找出一个正整数 K ,使得 K 与 S 的异或结果最大。

思路:尽量使得K的高位与S的高位不同。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=3e6+;
struct Tire
{
int T[N][],sum[N];
int cou;
void Init()
{
cou=;
memset(T,,sizeof(T));
memset(sum,,sizeof(sum));
}
void Insert(int num)
{
int i=,h=;
for(i=; i>=; i--)
{
if(T[h][(num>>i)&]==)
T[h][(num>>i)&]=cou++;
h=T[h][(num>>i)&];
}
sum[h]=num;
}
int ask(int num)
{
int i=,h=;
for(i=; i>=; i--)
{
int x=(num>>i)&,sign=;
if(x==) sign=;
if(T[h][sign]) h=T[h][sign];
else h=T[h][x];
}
return sum[h];
}
} tire;
int main()
{
int n,m;
int t,T;
scanf("%d",&T);
for(t=; t<=T; t++)
{
tire.Init();
scanf("%d%d",&n,&m);
int num;
while(n--)
{
scanf("%d",&num);
tire.Insert(num);
}
printf("Case #%d:\n",t);
while(m--)
{
scanf("%d",&num);
cout<<tire.ask(num)<<endl;
}
}
return ;
}

HDU 4825

Tire树入门专题的更多相关文章

  1. tire 树入门

    博客: 模板: 前缀是否出现: /* trie tree的储存方式:将字母储存在边上,边的节点连接与它相连的字母 trie[rt][x]=tot:rt是上个节点编号,x是字母,tot是下个节点编号 * ...

  2. Trie树入门

    Trie树入门 貌似很多人会认为\(Trie\)是字符串类型,但是这是数据结构!!!. 详情见度娘 下面开始进入正题. PS:本文章所有代码未经编译,有错误还请大家指出. 引入 先来看一个问题 ​ 给 ...

  3. 主席树入门(区间第k大)

    主席树入门 时隔5个月,我又来填主席树的坑了,现在才发现学算法真的要懂了之后,再自己调试,慢慢写出来,如果不懂,就只会按照代码敲,是不会有任何提升的,都不如不照着敲. 所以搞算法一定要弄清原理,和代码 ...

  4. poj 3841 Double Queue (AVL树入门)

    /****************************************************************** 题目: Double Queue(poj 3481) 链接: h ...

  5. Codeforces 714C. Sonya and Queries Tire树

    C. Sonya and Queries time limit per test:1 second memory limit per test: 256 megabytes input:standar ...

  6. 中文分词系列(二) 基于双数组Tire树的AC自动机

    秉着能偷懒就偷懒的精神,关于AC自动机本来不想看的,但是HanLp的源码中用户自定义词典的识别是用的AC自动机实现的.唉-没办法,还是看看吧 AC自动机理论 Aho Corasick自动机,简称AC自 ...

  7. 中文分词系列(一) 双数组Tire树(DART)详解

    1 双数组Tire树简介 双数组Tire树是Tire树的升级版,Tire取自英文Retrieval中的一部分,即检索树,又称作字典树或者键树.下面简单介绍一下Tire树. 1.1 Tire树 Trie ...

  8. [数据结构]字典树(Tire树)

    概述: Trie是个简单但实用的数据结构,是一种树形结构,是一种哈希树的变种,相邻节点间的边代表一个字符,这样树的每条分支代表一则子串,而树的叶节点则代表完整的字符串.和普通树不同的地方是,相同的字符 ...

  9. UVa 11732 (Tire树) "strcmp()" Anyone?

    这道题也是卡了挺久的. 给出一个字符串比较的算法,有n个字符串两两比较一次,问一共会有多少次比较. 因为节点会很多,所以Tire树采用了左儿子右兄弟的表示法来节省空间. 假设两个不相等的字符串的最长公 ...

随机推荐

  1. 更换win7锁屏壁纸

    1.打开注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\Backgroun ...

  2. MySQL 第八天(核心优化二)

    一.昨天内容回顾 存储引擎 保存数据的格式(技术),不同格式体现特性不一样 myisam ① 结构.数据.索引 文件单独存储 ② 存入数据顺序(不考虑主键顺序) ,写入数据速度快 ③ 并发性,低,锁整 ...

  3. SQL日期格式化应用大全

    Sql Server 中一个非常强大的日期格式化函数Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AMSelect CONVE ...

  4. win10 剪贴板 拒绝访问 Cannot open clipboard

    win10 Cannot open clipboard:拒绝访问. 在RAD IDE代码编辑器中,双击选中的文本,会自动复制到剪贴板里,导致的问题是 从 A处复制文本 到B处双击选中,粘贴的时候,是B ...

  5. springboot 使用c3p0数据库连接池的方法

    使用springboot开发时,默认使用内置的tomcat数据库连接池,经常碰到这种情况:运行时间一长,数据库连接中断了.所以使用c3p0连接池吧. 引入的maven依赖: <dependenc ...

  6. 最简单的Github入门基础

    起因是小伙伴分享给我github上的一个FQ工具,让我看实现过程.于是,就由关键字"github"搜索开始. 一言之,是个开源的SVN.和CVS.SVN类似,但是,里面有千千万万程 ...

  7. ThinkPHP升级指导

    升级指导 http://www.kancloud.cn/manual/thinkphp5/163239 从V5.0.1升级到V5.0.2 从V5.0.1升级到V5.0.2需要注意如下事项: 下列模型属 ...

  8. Android应用开发项目结构分析

    初学Android开发,初步理解的Android应用项目结构,备忘. 一.清单文件AndroidManifest.xml 功能: 1.供Android平台调用,供其了解本应用的信息,因此,所有的组件( ...

  9. 类似lol的友军视野怎么实现

    https://github.com/kbengine/kbengine/issues/129 你们可以按这个思路自己先改一下 例如: 可将队友的AOI实体也同步到自己的客户端中. 可对某些特定类型的 ...

  10. jquery仿淘宝规格颜色选择效果

    jquery实现的仿淘宝规格颜色选择效果源代码如下 jquery仿淘宝规格颜色选择效果 -收缩HTML代码 运行代码 [如果运行无效果,请自行将源代码保存为html文件运行] <script t ...