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 ...
随机推荐
- centos7安装cacti
参考博客地址:https://blog.csdn.net/kenn_lee/article/details/80565385 Cacti是一套基于PHP,MySQL,SNMP及RRDTool开发的网络 ...
- 【CF813D】Two Melodies
[CF813D]Two Melodies 题面 洛谷 题解 $dp$: 设$f[i][j]$表示第一个集合以$i$结尾.第二个集合以$j$结尾的合法长度之和最大是多少 明显有$f[i][j]=f[j] ...
- 八月暑期福利,10本Python热门书籍免费送!
八月第一周,网易云社区联合博文视点为大家带来Python专场送书福利,10本关于Python的书籍内容涉及Python入门.绝技.开发.数据分析.深度学习.量化投资等.以下为书籍简介,送书福利请见文末 ...
- OpenCL入门:(一:Intel核心显卡OpenCL环境搭建)
组装的电脑没带独立显卡,用的是CPU自带的核显,型号是Intel HD Graphics 530,关于显卡是否可以使用OpenCL,可以下载GPU-Z软件查看. 本文在Windows 10 64位系统 ...
- nmap保存结果
nmap 192.168.0.2 -oX D:\myscan.xml 参数解释: -oN <filespec> (标准输出) -oX <filespec> (XML输出) -o ...
- 从源码角度彻底理解ReentrantLock(重入锁)
目录 1.前言 2.AbstractQueuedSynchronizer介绍 2.1 AQS是构建同步组件的基础 2.2 AQS的内部结构(ReentrantLock的语境下) 3 非公平模式加锁流程 ...
- Animator & Timeline
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Pla ...
- android点击事件的四种方式
android点击事件的四种方式 第一种方式:创建内部类实现点击事件 代码如下: package com.example.dail; import android.text.TextUtils; im ...
- Scrum立会报告+燃尽图(十月二十三日总第十四次)
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2246 项目地址:https://git.coding.net/zhang ...
- scrum立会报告+燃尽图(第二周第六次)
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2251 一.小组介绍 组名:杨老师粉丝群 组长:乔静玉 组员:吴奕瑶.公冶 ...