Repository HDU - 2846 (trie)
题中没给范围 所以控制不好数组范围。。不是超内存就是runtime。。
好吧 到了晚上终于调出来数组模拟的了
题意:
求含有某字符段的个数
解析:
把每个字符串遍历一遍 以每个元素为起点建树就好了。。
注意add型。。因为每个字符串的元素只记一次 所以用id标记一下是否属于同一个源字符串就好了
嗯。。。。还有。。。用c++交。。。
指针:
#include <iostream>
#include <cstdio>
#include <sstream>
#include <cstring>
#include <map>
#include <set>
#include <vector>
#include <stack>
#include <queue>
#include <algorithm>
#include <cmath>
#define rap(i, a, n) for(int i=a; i<=n; i++)
#define rep(i, a, n) for(int i=a; i<n; i++)
#define lap(i, a, n) for(int i=n; i>=a; i--)
#define lep(i, a, n) for(int i=n; i>a; i--)
#define MOD 2018
#define LL long long
#define ULL unsigned long long
#define Pair pair<int, int>
#define mem(a, b) memset(a, b, sizeof(a))
#define _ ios_base::sync_with_stdio(0),cin->tie(0)
//freopen("1->txt", "r", stdin);
using namespace std;
const int maxn = , INF = 0x7fffffff;
char s[];
struct node
{
int num;
int id;
node *next[maxn];
node()
{
num = id = ;
mem(next, );
}
}rt; void build(char *a, int id)
{
int k = ;
node *p = &rt;
while(a[k])
{
// int x = a[k++] - 'a';
if(!p->next[a[k] - 'a']) p->next[a[k] - 'a'] = new node;
p = p->next[a[k++] - 'a'];
if(p->id != id)
p->num++;
p->id = id;
}
} int qp(char *a)
{
int k = ;
node *p = &rt;
// int x = a[k] - 'a';
while(a[k] && p->next[a[k] - 'a']) p = p->next[a[k++] - 'a'];
if(a[k]) return ;
return p->num;
} int main()
{
// init();
int n;
scanf("%d", &n);
rap(i, , n)
{
cin>> s;
int len = strlen(s);
rep(j, , len)
{
build(s+j, i);
}
}
int m;
scanf("%d", &m);
rap(i, , m)
{
cin>> s;
printf("%d\n", qp(s)); } return ;
}
数组:
#include <iostream>
#include <cstdio>
#include <sstream>
#include <cstring>
#include <map>
#include <set>
#include <vector>
#include <stack>
#include <queue>
#include <algorithm>
#include <cmath>
#define rap(i, a, n) for(int i=a; i<=n; i++)
#define rep(i, a, n) for(int i=a; i<n; i++)
#define lap(i, a, n) for(int i=n; i>=a; i--)
#define lep(i, a, n) for(int i=n; i>a; i--)
#define MOD 2018
#define LL long long
#define ULL unsigned long long
#define Pair pair<int, int>
#define mem(a, b) memset(a, b, sizeof(a))
#define _ ios_base::sync_with_stdio(0),cin.tie(0)
//freopen("1.txt", "r", stdin);
using namespace std;
const int maxn = , INF = 0x7fffffff;
int trie[maxn*][], sum[maxn*], id[maxn*];
int rt, tot;
char s[];
void build(char* ss, int p)
{
int len = strlen(ss);
rt = ;
for(int i=; i<len; i++)
{
int x = ss[i] - 'a';
if(trie[rt][x] == )
{
trie[rt][x] = ++tot;
}
rt = trie[rt][x];
if(id[rt] != p)
sum[rt]++;
id[rt] = p;
}
//sum[rt]++;
} int qp()
{
int len = strlen(s);
rt = ;
for(int i=; i<len; i++)
{
int x = s[i] - 'a';
if(trie[rt][x] == ) return ;
rt = trie[rt][x];
}
return sum[rt];
} void init()
{
mem(trie, );
mem(sum, );
mem(id, );
tot = ;
} int main()
{
init();
int n;
scanf("%d", &n);
rap(i, , n)
{
cin>> s;
int len = strlen(s);
rep(j, , len)
{
build(s+j, i);
// cout<< " " << s+j <<endl;
}
}
int m;
scanf("%d", &m);
rap(i, , m)
{
cin>> s;
printf("%d\n", qp()); } return ;
}
Repository HDU - 2846 (trie)的更多相关文章
- hdu 4825(Trie)
Xor Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Others)Total S ...
- A * B Problem Plus HDU - 1402 (FFT)
A * B Problem Plus HDU - 1402 (FFT) Calculate A * B. InputEach line will contain two integers A and ...
- D - 淡黄的长裙 HDU - 4221(贪心)
D - 淡黄的长裙 HDU - 4221(贪心) James is almost mad! Currently, he was assigned a lot of works to do, so ma ...
- 【python】Leetcode每日一题-前缀树(Trie)
[python]Leetcode每日一题-前缀树(Trie) [题目描述] Trie(发音类似 "try")或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的 ...
- HDU 1671 Phone List (Trie)
pid=1671">Phone List Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ( ...
- hdu 1251 统计难题 (字典树(Trie)<PS:C++提交不得爆内存>)
统计难题Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131070/65535 K (Java/Others)Total Submis ...
- LA3942-Remember the Word(Trie)
题意: 有s个不同的单词,给出一个长字符串把这个字符串分解成若干个单词的连接(可重复使用),有多少种分解方法 分析: dp[i]表示i开始的字符串能分解的方法数 dp[i]=sum(dp[i+len( ...
- hdu 5055(坑)
题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=5055 Bob and math problem Time Limit: 2000/1000 MS ( ...
- hdu 5391 (数论)
Zball in Tina Town Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Oth ...
随机推荐
- 1116: [POI2008]CLO
1116: [POI2008]CLO https://lydsy.com/JudgeOnline/problem.php?id=1116 分析: 单独考虑每个联通块的情况. 设这个联通块里有n个点,那 ...
- superset 安装测试,基于windows 和 centos7.x
1.刚开始在windows平台测试搭建,报各种问题,搭建可以参考官网https://superset.incubator.apache.org/installation.html#deeper-sql ...
- sklearn半监督学习
标签: 半监督学习 作者:炼己者 欢迎大家访问 我的简书 以及 我的博客 本博客所有内容以学习.研究和分享为主,如需转载,请联系本人,标明作者和出处,并且是非商业用途,谢谢! --- 摘要:半监督学习 ...
- 常用SQL语句大全(SQL Server)
一.基础 查看数据库状态 select state_desc from sys.databases where name='dbname' -- dbname数据库名 1.说明:创建数据 ...
- Elastic-Job 分布式调度平台
概述 referred:http://elasticjob.io/docs/elastic-job-lite/00-overview Elastic-Job是一个分布式调度解决方案,由两个相互独立的子 ...
- Centos7下安装Seafile实现私有网盘
Seafile是一个开源.专业.可靠的云存储平台:解决文件集中存储.共享和跨平台访问等问题,由北京海文互知网络有限公司开发,发布于2012年10月:除了一般网盘所提供的云存储以及共享功能外,Seafi ...
- python怎么安装requests、beautifulsoup4等第三方库
零基础学习python最大的难题之一就是安装所有需要的软件,下面来简单介绍一下如何安装用pip安装requests.beautifulsoup4等第三方库: 方法/步骤 点击开始,在运行里 ...
- 基于kcp,consul的service mesh实现
名字kmesh 技术:proxy,kcp,consul proxy proxy分为前端和后端 前端代理服务层,包括外部的service 后端实现负债均衡 kcp kcp 基于udp,能够实现快速的传输 ...
- MySQL Proxy和 Amoeba 工作机制浅析
MySQL Proxy处于客户端应用程序和MySQL服务器之间,通过截断.改变并转发客户端和后端数据库之间的通信来实现其功能,这和WinGate 之类的网络代理服务器的基本思想是一样的.代理服务器是和 ...
- loadrunner socket协议问题归纳(6)
首先让我们先看一下loadrunner- winsock 函数 一览表: lrs_accept_connection 接受侦听套接字连接 lrs_close_socket 关闭打开的套接字 ...