POJ 3630 Phone List: 模板

///meek

#include<bits/stdc++.h>
using namespace std; using namespace std ;
typedef long long ll;
#define mem(a) memset(a,0,sizeof(a))
#define pb push_back
inline ll read()
{
ll x=,f=;char ch=getchar();
while(ch<''||ch>''){
if(ch=='-')f=-;ch=getchar();
}
while(ch>=''&&ch<=''){
x=x*+ch-'';ch=getchar();
}return x*f;
}
//****************************************
const int N=+;
#define mod 10000007 #define inf 10000007
#define maxn 10000 char a[N];
struct Trie {
int ch[N][],sum[N];
int siz;
Trie() { siz=;
mem(ch);mem(sum);
}
int idx(char c) {return c-'a';}
void insertt(char *s) {
int u=,n=strlen(s);
for(int i=;i<n;i++) {
int c=idx(s[i]);
if(!ch[u][c]) {
ch[u][c]=siz++;
}
u=ch[u][c];sum[u]++;
}
}
int ask(char *s) {
int u=,n=strlen(s);
for(int i=;i<n;i++) {
int c=idx(s[i]);
if(ch[u][c]) u=ch[u][c];
else return ;
}
return sum[u];
}
}trie;
int main() {
while(gets(a)) {
if(strlen(a)==)break;
trie.insertt(a);
}
while(scanf("%s",a)!=EOF) {
cout<<trie.ask(a)<<endl;
}
return ;
}

POJ3630

HDU 1004 Let the Balloon Rise:模板

///meek

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std; using namespace std ;
typedef long long ll;
#define mem(a) memset(a,0,sizeof(a))
#define pb push_back
inline ll read()
{
ll x=,f=;char ch=getchar();
while(ch<''||ch>''){
if(ch=='-')f=-;ch=getchar();
}
while(ch>=''&&ch<=''){
x=x*+ch-'';ch=getchar();
}return x*f;
}
//****************************************
const int N=+;
#define mod 10000007 #define inf 10000007
#define maxn 10000 struct Trie{
int ch[N][],sum[N],siz=,W=,ansi,ans;
void init() {mem(ch),mem(sum),siz=;W=,ansi=;ans=-;}
int idx(char c) {return c-'a';}
void insertt(char *s) {
int u=,n=strlen(s);
W++;
for(int i=;i<n;i++) {
int c=idx(s[i]);
if(!ch[u][c]) {
ch[u][c]=siz++;
}
u=ch[u][c],sum[u]++;
if(ans<sum[u]&&i==n-) {ans=sum[u];ansi=W;}
}
}
}trie;
int main() {
char a[N][];int n;
while(scanf("%d",&n)&&n) {
trie.init();
for(int i=;i<=n;i++) {
scanf("%s",a[i]);
trie.insertt(a[i]);
}
cout<<a[trie.ansi]<<endl;
}
return ;
}

HDU1004

HDU 1251统计难题 :查找前缀个数

///meek

#include<bits/stdc++.h>
using namespace std; using namespace std ;
typedef long long ll;
#define mem(a) memset(a,0,sizeof(a))
#define pb push_back
inline ll read()
{
ll x=,f=;char ch=getchar();
while(ch<''||ch>''){
if(ch=='-')f=-;ch=getchar();
}
while(ch>=''&&ch<=''){
x=x*+ch-'';ch=getchar();
}return x*f;
}
//****************************************
const int N=+;
#define mod 10000007 #define inf 10000007
#define maxn 10000 char a[N];
struct Trie {
int ch[N][],sum[N];
int siz;
Trie() { siz=;
mem(ch);mem(sum);
}
int idx(char c) {return c-'a';}
void insertt(char *s) {
int u=,n=strlen(s);
for(int i=;i<n;i++) {
int c=idx(s[i]);
if(!ch[u][c]) {
ch[u][c]=siz++;
}
u=ch[u][c];sum[u]++;
}
}
int ask(char *s) {
int u=,n=strlen(s);
for(int i=;i<n;i++) {
int c=idx(s[i]);
if(ch[u][c]) u=ch[u][c];
else return ;
}
return sum[u];
}
}trie;
int main() {
while(gets(a)) {
if(strlen(a)==)break;
trie.insertt(a);
}
while(scanf("%s",a)!=EOF) {
cout<<trie.ask(a)<<endl;
}
return ;
}

HDU1251

HDU 4825 Xor Sum : 给你n个数m个询问,每隔询问一个A,问你这n个数中与A异或值最大是多少,

将树转化成01 串的trie树,经典题型

///meek

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std; using namespace std ;
typedef long long ll;
#define mem(a) memset(a,0,sizeof(a))
#define pb push_back
inline ll read()
{
ll x=,f=;char ch=getchar();
while(ch<''||ch>''){
if(ch=='-')f=-;ch=getchar();
}
while(ch>=''&&ch<=''){
x=x*+ch-'';ch=getchar();
}return x*f;
}
//****************************************
const int N=+;
#define mod 10000007 #define inf 10000007
#define maxn 10000 struct Trie{
int ch[N][],sum[N],siz=,ans,W;
void init(){mem(sum),mem(ch),siz=;}
void insertt(int x) {
int tmp=x;
int each[],k=;mem(each);
while(x) {
each[k++]=x%;
x/=;
}int u=;
for(int i=;i>=;i--) {
int c=each[i];
if(!ch[u][c]){
ch[u][c]=siz++;
}
u=ch[u][c];if(i==)sum[u]=tmp;
}
}
int ask(int x) {
int u=;int tmp=x;
int each[],k=;mem(each);
while(x) {
each[k++]=x%;
x/=;
}
for(int i=;i>=;i--) {
int g,c=each[i];if(c==)g=;else g=;
if(ch[u][g]) {
u=ch[u][g];
}
else u=ch[u][c];
if(i==) return sum[u];
}
}
}trie;
int main() { int T=read(),n,m,z[N];
int oo=;
while(T--) {int a[N];
trie.init();
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) {
scanf("%d",&a[i]);
trie.insertt(a[i]);
}
for(int i=;i<=m;i++) {
scanf("%d",&z[i]);
} printf("Case #%d:\n",oo++);
for(int i=;i<=m;i++) {
cout<<trie.ask(z[i])<<endl;
}
}
return ;
}

HDU 4825

POJ 3764 The xor-longest Path:

题意:给你一个树,及n-1条边权,问你任意一条路径上最大异或边权值是多少

题解: 我们根据异或性质,对于u->v这条路径上异或值可以转化为 XOR(0->v)^XOR(0->u)

我们先dfs出根节点到任意节点的路径异或值,于是转化成任意两个数的 异或最大值了

///meek

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std; using namespace std ;
typedef long long ll;
#define mem(a) memset(a,0,sizeof(a))
#define pb push_back
inline ll read()
{
ll x=,f=;char ch=getchar();
while(ch<''||ch>''){
if(ch=='-')f=-;ch=getchar();
}
while(ch>=''&&ch<=''){
x=x*+ch-'';ch=getchar();
}return x*f;
}
//****************************************
const int N=+;
#define mod 10000007 #define inf 10000007
#define maxn 10000 int a[N],head[N],t,n;
struct ss {
int to,next,va;
}e[N*];
void init() {mem(head),t=;}
void add(int u,int v,int w) {e[t].to=v;e[t].va=w;e[t].next=head[u];head[u]=t++;}
void dfs(int x,int pre) {
for(int i=head[x];i;i=e[i].next) {
if(e[i].to==pre) continue;
a[e[i].to]=e[i].va^a[x];
dfs(e[i].to,x);
}
}
struct Trie{
int ch[N][],sum[N],siz,ans,W;
void init(){mem(sum),mem(ch),siz=;}
void insertt(int x) {
int tmp=x;
int each[],k=;mem(each);
while(x) {
each[k++]=x%;
x/=;
}int u=;
for(int i=;i>=;i--) {
int c=each[i];
if(!ch[u][c]){
ch[u][c]=siz++;
}
u=ch[u][c];if(i==)sum[u]=tmp;
}
}
int ask(int x) {
int u=;int tmp=x;
int each[],k=;mem(each);
while(x) {
each[k++]=x%;
x/=;
}
for(int i=;i>=;i--) {
int g,c=each[i];if(c==)g=;else g=;
if(ch[u][g]) {
u=ch[u][g];
}
else u=ch[u][c];
if(i==) return sum[u];
}
}
}trie;
int main() { while(scanf("%d",&n)!=EOF) {
int u,v,w;init();
trie.init();
for(int i=;i<n;i++) {
scanf("%d%d%d",&u,&v,&w);
add(u,v,w),add(v,u,w);
}
memset(a,,sizeof(a));
dfs(,-);
for(int i=;i<n;i++) {
trie.insertt(a[i]);
}
int ans=;
for(int i=;i<n;i++) {
ans=max(ans,a[i]^trie.ask(a[i]));
}
cout<<ans<<endl;
}
return ;
}

POJ 3764

蒟蒻的trie树专题的更多相关文章

  1. 蒟蒻浅谈树链剖分之一——两个dfs操作

    树链剖分,顾名思义就是将树形的结构剖分成链,我们以此便于在链上操作 首先我们需要明白在树链剖分中的一些概念 重儿子:某节点所有儿子中子树最多的儿子 重链:有重儿子构成的链 dfs序:按重儿子优先遍历时 ...

  2. 蒟蒻的数位DP专题总结

    BZOJ  1026: [SCOI2009]windy数: 题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=1026           d ...

  3. 【BZOJ-4636】蒟蒻的数列 动态开点线段树 ||(离散化) + 标记永久化

    4636: 蒟蒻的数列 Time Limit: 30 Sec  Memory Limit: 256 MBSubmit: 247  Solved: 113[Submit][Status][Discuss ...

  4. BZOJ_4636_蒟蒻的数列_线段树+动态开点

    BZOJ_4636_蒟蒻的数列_线段树+动态开点 Description 蒟蒻DCrusher不仅喜欢玩扑克,还喜欢研究数列 题目描述 DCrusher有一个数列,初始值均为0,他进行N次操作,每次将 ...

  5. 【bzoj4636】蒟蒻的数列 离散化+线段树

    原文地址:http://www.cnblogs.com/GXZlegend/p/6801379.html 题目描述 蒟蒻DCrusher不仅喜欢玩扑克,还喜欢研究数列 题目描述 DCrusher有一个 ...

  6. [bzoj4636]蒟蒻的数列_线段树

    蒟蒻的数列 bzoj-4636 题目大意:给定一个序列,初始均为0.n次操作:每次讲一段区间中小于k的数都变成k.操作的最后询问全局和. 注释:$1\le n\le 4\cdot 10^4$. 想法: ...

  7. 并不对劲的字符串专题(三):Trie树

    据说这些并不对劲的内容是<信息学奥赛一本通提高篇>的配套练习. 并不会讲Trie树. 1.poj1056-> 模板题. 2.bzoj1212-> 设dp[i]表示T长度为i的前 ...

  8. 洛谷P2412 查单词 [trie树 RMQ]

    题目背景 滚粗了的HansBug在收拾旧英语书,然而他发现了什么奇妙的东西. 题目描述 udp2.T3如果遇到相同的字符串,输出后面的 蒟蒻HansBug在一本英语书里面找到了一个单词表,包含N个单词 ...

  9. 【蒟蒻の进阶PLAN】 置顶+持续连载

    看到周围神犇们纷纷列计划,本蒟蒻也决定跟随他们的步伐,计划大约是周计划吧,具体怎么安排我也不确定.. 2015.12.30 刚刚学习完最基础的网络流,需要进行这方面的练习,从简到难,有空余的话尝试学习 ...

随机推荐

  1. viewpager无线轮播获取网络图片

    首先创建小圆点 小圆点的两个属性一共两个属性另一个跟这个一个样,只不过颜色能让我们区分的 <?xml version="1.0" encoding="utf-8&q ...

  2. Hive扩展功能(七)--Hive On Spark

    软件环境: linux系统: CentOS6.7 Hadoop版本: 2.6.5 zookeeper版本: 3.4.8 主机配置: 一共m1, m2, m3这五部机, 每部主机的用户名都为centos ...

  3. ElasticSearch-5.21安装

    环境 操作系统:Centos 6.5 X64 IP地址:192.168.56.100 JDK 环境: # java -version java version "1.8.0_121" ...

  4. 探索java世界中的日志奥秘

                    java日志简单介绍 对于一个应用程序来说日志记录是必不可少的一部分.线上问题追踪,基于日志的业务逻辑统计分析等都离不日志.JAVA领域存在多种日志框架,目前常用的日志 ...

  5. C#——接口的意义以及与抽象类的区别

    接口的意义是什么呢?接口与抽象类又有什么区别?什么情况选择用接口?什么情况选择用抽象类? 接口的意义: 1.实际开发中的约束作用,继承接口的类必须实现接口规定的方法,方便多人开发中的协同,避免随意性. ...

  6. js 攻坚克难

    new new : 官方解释: 如果在一个函数前面带上new来调用,那么背地里将会创建一个连接到该函数的prototype的成员的新对象,同时this会被绑定到哪个新对象上: new 是用来创建对象的 ...

  7. Stanford coursera Andrew Ng 机器学习课程第二周总结(附Exercise 1)

    Exercise 1:Linear Regression---实现一个线性回归 重要公式 1.h(θ)函数 2.J(θ)函数 思考一下,在matlab里面怎么表达?如下: 原理如下:(如果你懂了这道作 ...

  8. Python元类(metaclass)以及元类实现单例模式

    这里将一篇写的非常好的文章基本照搬过来吧,这是一篇在Stack overflow上很热的帖子,我看http://blog.jobbole.com/21351/这篇博客对其进行了翻译. 一.理解类也是对 ...

  9. Codeforces_733D

    D. Kostya the Sculptor time limit per test 3 seconds memory limit per test 256 megabytes input stand ...

  10. centos7安装个人网盘nextcloud

    本节介绍如何在centos7上建立个人云盘nextcloud服务器 第一:建立用户nextcloud 第二:安装下载工具wget 第三:把nextcloud账号添加到sudoers目录下 第四:切换到 ...