hdu6096 String AC自动机

【生信】全基因组测序(WGS) 1、全基因组测序(WGS) 的定义 2、GWS流程 2.1准备工作——分析软件 2.2原始数据质控 2.3数据预处理 2.4变异检测 阅读详情

题目:给你N个字典单词s,Q个前缀s1,后缀s2,保证s1和s2不想交,问通过s1,s2能在字典中和多少个单词匹配。

思路:假设单词为abcd,前缀为ab,后缀为cd,那么我们将单词变成abcd#abcd,前后缀变为cd#ab,那么我们就可以通过AC自动机解决这道题目了

代码:

#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<string>
#include<vector>
#include<map>
#include<bitset>
#include<set>
#include<queue>
#include<stack>
#include<list>
#include<numeric>
using namespace std;
#define LL long long
#define ULL unsigned long long
#define INF 0x3f3f3f3f
#define mm(a,b) memset(a,b,sizeof(a))
#define PP puts("*********************");
template<class T> T f_abs(T a){ return a > 0 ? a : -a; }
template<class T> T gcd(T a, T b){ return b ? gcd(b, a%b) : a; }
template<class T> T lcm(T a,T b){return a/gcd(a,b)*b;}
// 0x3f3f3f3f3f3f3f3f
// 0x3f3f3f3f

const int SIGMA_SIZE = 27;
const int MAXNODE = 1e6+50;
const int maxn=1e5+50;
int ch[MAXNODE][SIGMA_SIZE];
int f[MAXNODE];
int val[MAXNODE];
int last[MAXNODE];
int cnt[MAXNODE],dep[MAXNODE];
int pos[maxn],len[maxn];
int sz;
void AC_init(){
    sz=1;
    mm(ch[0],0);
    mm(cnt,0);
    dep[0]=0;
}
void AC_insert(string s,int v){
    int u=0,n=s.size();
    for(int i=0;i<n;i++){
        int c=s[i]-'a';
        if(!ch[u][c]){
            mm(ch[sz],0);
            val[sz]=0;
            dep[sz]=dep[u]+1;
            ch[u][c]=sz++;
        }
        u=ch[u][c];
    }
    val[u]=1;
    pos[v]=u;
}
int AC_find(string T,int L){
    int n=T.size();
    int j=0;
    for(int i=0;i<n;i++){
        int c=T[i]-'a';
        j=ch[j][c];
        while(dep[j]>L)
            j=f[j];
        cnt[last[j]]++;
    }
}
int num[MAXNODE],stk[MAXNODE];
void AC_count(){
    int top=0;
    mm(num,0);
    for(int i=0;i<sz;i++) num[f[i]]++;
    for(int i=0;i<sz;i++) if(!num[i]) stk[top++]=i;
    for(int i=0;i<top;i++){
        int j=f[stk[i]];
        cnt[j]+=cnt[stk[i]];
        if((--num[j])==0)
            stk[top++]=j;
    }
}
void AC_getFail(){
    queue<int>q;
    f[0]=0;
    for(int c=0;c<SIGMA_SIZE;c++){
        int u=ch[0][c];
        if(u){
            f[u]=0;q.push(u);last[u]=0;
        }
    }
    while(!q.empty()){
        int r=q.front();q.pop();
        for(int c=0;c<SIGMA_SIZE;c++){
            int u=ch[r][c];
            if(!u){
                ch[r][c]=ch[f[r]][c];continue;
            }
            q.push(u);
            int v=f[r];
            while(v&&!ch[v][c]) v=f[v];
            f[u]=ch[v][c];
            last[u]=val[u]?u:last[f[u]];
        }
    }
}
string s[maxn];
string s1,s2;
int main(){

    int T,N,Q;
    scanf("%d",&T);
    while(T--){
        AC_init();
        scanf("%d%d",&N,&Q);
        for(int i=1;i<=N;i++){
            cin>>s[i];
            len[i]=s[i].size()+1;//这是防止重复覆盖要用的
            string temp=s[i];
            s[i]+='z'+1;
            s[i]+=temp;
        }
        for(int i=1;i<=Q;i++){
            cin>>s1>>s2;
            s2+='z'+1;
            s2+=s1;
            AC_insert(s2,i);
        }
        AC_getFail();
        for(int i=1;i<=N;i++)
            AC_find(s[i],len[i]);
        AC_count();
        for(int i=1;i<=Q;i++)
            printf("%d\n",cnt[pos[i]]);
    }
    return 0;
}


2.2.1.3-移动平均线(python画k线、均线、5日线、买卖点图、python均线策略) * 绘制一个k线图,也就是蜡烛图 * 计算5日均线值、10日均线值 * 在k线图上,绘制5日线和10日线图 * 在5日线上,绘制与10日线的交叉点(上穿、下穿时) python画k线、均线、5日线、买卖点图、python均线策略 阅读详情

相关推荐

MQTT在智能家居中的实战:用Android手机控制ESP8266设备(基于EMQX)

本文详细介绍了如何利用MQTT协议构建一个完整的智能家居控制系统,通过Android手机App远程操控ESP8266设备。文章提供了从EMQX服务器部署、ESP8266端Arduino固件开发到Android客户端搭建的完整实战指南,并深入探讨了系统联调、稳定性优化与安全加固等关键环节,为物联网开发者提供了一套可复用的解决方案。

ujm567890的博客 456

HDU 6096 String AC自动机(多种解法)

传送门:HDU6096 题意:给出n个字符串和q个询问,每次询问给出两个串 p 和 s 。要求统计所有字符串中前缀为 p 且后缀为 s (不可重叠)的字符串的数量。 思路:从dalao哪里学来的巧妙的解法: 首先是要离线处理。 将询问做成s + ‘#’ + p的模式串插入到AC自动机里,并记录插入的结点位置,然后将每一个原串str做成str + ‘#’ + str的主串,用AC自动机进行匹

WA是一笔财富 1574

osgearth2.10 demo功能介绍

osgearth-2.10 demo: 说明: 1、运行环境win7 x64 旗舰版,CPU i5-6400 8核,8G内存; 2、括号内是对应demo的测试参数(.earth); 3、配置OSG_FILE_PATH; 4、参数命令行可以查看各个demo需要的输入参数; 5、前缀说明:gui界面程序、cmd控制台程序、non功能未知; 6、程序后括号里的non表示不需要通过命令行输入参数; 示例: 1、gui:osgearth_3pv(simple.earth):相机与地球的投影关系,Range表示相机

rach09的专栏 2421

HDU-6096 String(字典树+线段树扫描线)

传送门:HDU-6096 题解:字典树+线段树扫描线 首先用字典树对字符串按前缀的字典序排序,然后翻转字符串再按后缀的字典序排序,如果某些字符串要满足某个前缀,那么这些字符串一定是前缀排序中相邻,如果要满足后缀同理。 那么我们就可以得到2个区间[lx,rx],[ly,ry]分别代表满足前缀prf的字符串在[lx,rx]区间,满足后缀suf的字符串在[ly,ry]区间,如果某个字符串同时在这2

十分残念的博客 612

C#实战:5分钟搞定Modbus RTU通讯(基于NModbus4库)

本文详细介绍了如何使用C#和NModbus4库快速实现Modbus RTU通讯,包括环境配置、核心功能实现、性能优化及常见问题排查。通过代码示例和实用技巧,帮助开发者高效完成工业自动化设备的数据采集与控制任务。

weixin_30689307的博客 467

微信小程序 - 解决请求报错 request:fail errcode:-201 cronet_error_code:-201 error_msg:net::ERR_CERT_DATE_INVALID

微信小程序报错“request:fail errcode:-201 cronet_error_code:-201 error_msg:net::ERR_CERT_DATE_INVALID“,微信小程序请求报错,微信小程序errcode:-201,服务器报错,无法调用接口,微信小程序真机https请求失败,微信小程序wx.request接口报错,小程序真机调试运行接口都报错了,真机测试下网络请求都不行了且报错,证书没问题依旧报错,检查HTTPS证书,ssl证书,使用浏览器测试访问证书是正常的,不是证书问题,请

🏆 前端领域优质创作者 1万+

hdu6096(字典树)

题意是给n个字符串,然后m次查询,每次查询有给定的前缀和给定的后缀的字符串有多少个 对于每一个字符串构建字典树,但是不同于一般的构建,构建Trie树时,把每一个字符串的第1个字符放在第一个,第n-1个字符放在第二个,第2个字符放在第三个,n-2个字符放在第四个,以此类推,一共放进2n个字符,然后查询时,也把给定的前缀后缀如此处理,si,pn-1,s2,pn-2……如果前缀比后缀长或者后缀比前缀长就

远方传来风铃 339

ESP32-C3入门教程 WiFi篇①——WiFi Scan 扫描附近AP无线热点 | 堵塞等待扫描结果,回调事件通知扫描结果

文章目录一、快速运行二、运行效果三、程序流畅四、关键函数4.1 扫描所有有效的AP4.2 获取上次扫描中找到的AP列表4.3 获取上次扫描中找到的AP数 一、快速运行 示例项目中,选择WiFi—>scan menuconfig配置ESP32C3-Specific—>Rec 0 芯片选择ESP32-C3(Built-in USB JTAG) 快速运行ESP-IDF Build, Flash and Monitor(左下角) 二、运行效果 三、程序流畅 esp_netif_init,初始

5416

hdu 6096 String(AC自动机)

转换还是比较巧妙的。 因为要求前缀后缀都包含的个数,所以可以把字符串a转换成a#a这样一个字符串,比如abca就转换成abca#abca 然后对于一组前缀a后缀b转换成b#a,比如ab ca,就是ca#ab, 然后对前缀后缀的串建立AC自动机,让主串去匹配,如上述例子,ca#ab满足为abca#abca的一个子串,也就是abca满足这个前缀后缀,所以问题,就转换成了典型的ac自动机匹配问题。

johsnows的博客 1028

【BlueZ】编译产物详解:可执行文件/库文件/工具的生成路径与用途

BlueZ二次开发编译产物机制解析 摘要:在BlueZ蓝牙协议栈二次开发中,90%的报错源于对编译产物类型和路径的混淆。本文系统剖析BlueZ的三阶段编译机制:1)配置阶段生成Makefile;2)编译阶段在.libs目录下产生临时库和可执行文件(不可直接运行);3)安装阶段将产物部署到系统标准路径。重点解析守护进程、命令行工具、动态库的核心路径差异,并针对五大高频问题(如临时库运行崩溃、动态库不匹配、系统覆盖等)给出解决方案。

byte轻骑兵的技术小窝 1万+

一步一步详解LSTM网络【从RNN到LSTM到GRU等,直至attention】

本文主要译至并加上了部分笔者的见解,对于全面理解LSTM有一定的帮助。

zik的博客 3078

hdu6096 String【AC自动机】

题目大意:给出一些字符串,给出前缀后缀模式询问,问有多少字符串符合该模式解题思路:之前一直没头绪,看了看dalao的解法,真是奥妙重重。对于每个询问,我们将它变成 后缀+分隔符+前缀 的形式,如询问ab cd变为cd{ab。 对于每个原串,我们也变为 原串+分隔符+原串的形式,如abecd变为abecd{abecd。 这时我们若用询问串匹配原串就刚好只能匹配到题目所要求的一段了。 所以处理后直

cdsszjj的博客 324

学Simulink--环境感知场景实例:基于Simulink的毫米波雷达多目标跟踪仿真

本文介绍了基于Simulink的毫米波雷达多目标跟踪仿真系统,重点分析了FMCW雷达信号处理流程(Range/Doppler FFT、CFAR检测)和多目标跟踪算法(JPDA数据关联、EKF状态估计)。通过构建城市道路交叉场景,验证了系统在跟踪精度(位置误差<0.2m)、实时性(单帧处理24ms)和鲁棒性(ID切换率<5%)方面的性能优势,并提出了UKF滤波、多传感器融合等优化方向。该仿真系统为自动驾驶环境感知提供了实用的毫米波雷达跟踪解决方案。

amy_mhd的博客 92

hdu 6096 String(AC自动机巧妙建图)

题目链接:hdu 6096 String 题意: 给你n个字符串,和q个询问,每个询问给出一个前缀和后缀,问你在这n个字符串中有多少个包含给出的询问,前缀和后缀不能重叠。 题解: 比赛的时候用的hash,无限wa,然后下来后发现他有一组特别的数据专卡我的hash,随便怎么换种子都能卡。真是R了狗了。 然后这题有一个巧妙的办法,用AC自动机去跑。 比如待匹配串是abc,abcd,那么我们...

weixin_30814329的博客 154

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

HDU6096.String (思维+AC自动机)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6096 题意:给出几组字符串W,又给出几个字符串的前缀p和后缀s,要求在前面给出的几组W字符串中找出前缀后缀同样出现p和s的数目 解题思路: 有两种,都很巧妙地拼凑出AC自动机解法 第一种: 把w字符串保存为w+’{’+w的形式,这样’{‘的左右两边就出现了后缀+{+前缀的情况,{用来分割开后缀与前缀...

Buyi的博客 264

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

【HDU6096】String(AC自动机)

传送门 题解: 对于模式串strstrstr,我们构造串str+∗+strstr+*+strstr+∗+str,对于询问串pre,sufpre,sufpre,suf,我们构造串suf+∗+presuf+*+presuf+∗+pre 容易发现,对于所有的询问串建立AC自动机,然后把模式串放上去跑,匹配问题就解决了。至于串长限制,直接暴力跳fail即可。 对于离线的,这种做法已经足够了,也是就是我写...

zxyoi_dreamer的博客(不定期诈尸) 252

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

AC自动机 - String - HDU 6096

AC自动机 - String - HDU 6096 题意: T组测试用例,每组包括N个长度为Wi(1<=i<=n)字符串的字符串,以及Q组询问。每组询问包含2个长度分别为Pi和Si的短字符串,对于每组询问,查找出N个字符串中有多少个的前缀和后缀分别是这2个短字符串,但前后缀不能发生重叠。T组测试用例,每组包括N个长度为W_i(1<=i<=n)字符串的字符串,以及Q组询问。\...

njuptACMcxk的博客 207

HDU - 6096 String(这个ac自动机有、骚)

题意:给出n个串作为字典,和q个查询,每个查询包含一个前缀和一个后缀,问字典中有多少串与查询给出的前后缀匹配。 绝了这个做法。 ac自动机在失配的时候,会自动跳转到当前在ac自动机上跑的串能够匹配的最长后缀位置,这一条性质竟然能搞出这么骚的操作。 将查询的前后缀以后缀 + “{” + 前缀的形式拼在一起(之所以用大右括号是因为它是小写字母z的ascii码下一个),全部建立ac自动机,然后将字典串变...

Cymbals的博客 415

HDU 6096 String(AC自动机+树状数组)

题意 给定 \(n\) 个单词,\(q\) 个询问,每个询问包含两个串 \(s_1,s_2\),询问有多少个单词以 \(s_1\) 为前缀, \(s_2\) 为后缀,前后缀不能重叠。 \(1 \leq n,q \leq 10^5\) 思路 字符串题有一个小技巧,拼接字符串,中间加上连接符。如这道题,可以将查询变成 \(s_2+\text{\{}+s_1\) 的形式,相应的,把单词 \(T\) 变为...

weixin_30325071的博客 150

HDU 6096 (String) AC自动机

题目大意现在有N个单词,Q次询问,每次询问包含两个字符串a和b,求出以a为前缀且以b为后缀的单词共有多少个,其中a和b不互相覆盖。解题思路题目中所说的a和b不互相覆盖的含义是当 a =“ac”b = “cm”时,“acm”串不满足条件,因为其以a为前缀且以b为后缀时,a和b相互覆盖了。题解中所说的做法没太看懂,现在给出一种巧妙构造并利用AC自动机解题的方法。由于询问的时候,每次给出两个字符串并不便于

qq_37328747的博客 437

2017多校第6场 HDU 6096 String AC自动机

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6096 题意:给了一些模式串,然后再给出一些文本串的不想交的前后缀,问文本串在模式串的出现次数。 解法: 因为要求前缀后缀都包含的个数,所以可以把字符串a转换成a#a这样一个字符串,比如abca就转换成abca#abca 然后对于一组前缀a后缀b转换成b{a,比如ab ca,就是ca{...

aishangg437965的博客 132

HDU 6096 String(AC自动机)

【题目链接】http://acm.hdu.edu.cn/showproblem.php?pid=6096 【题目大意】   给出一些字符串,给出前缀后缀模式询问,问有多少字符串符合该模式 【题解】   我们将字符串变为双倍,在中间增加拼接符,   对于每个前后缀模式,我们将其处理为[后缀+拼接符+前缀]的形式,   那么原题等价于统计前后缀模式在多少个字符串...

weixin_30338743的博客 76

hdu 6096---String(AC自动机)

题目链接 Problem Description Bob has a dictionary with N words in it.Now there is a list of words in which the middle part of the word has continuous letters disappeared. The middle part does not inc...

weixin_30889885的博客 158

2017多校联合第六场String/hdu 6096 (tire tree/ac自动机)

String Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others) Total Submission(s): 1053    Accepted Submission(s): 339 Problem Description Bob has a dictiona

The_star_is_at的博客 388

HDU 6096 String 字典树数组建树

题目链接:HDU6096 String Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others) Total Submission(s): 996    Accepted Submission(s): 325 Problem Description B

teddywang 350

HDU 6096 String(2017 Multi-University Training Contest 6)

题目链接:String 题意:给定NN字符串以及QQ个询问,每一个询问包括一个前缀和一个后缀,在前后缀不重叠的情况下,有多少个字符串有这个前缀和后缀。 题解:把每一个询问以“后缀+‘{’+前缀”形式连接起来组成新的字符串,并用这些字符串构成AC自动机,同时记录原询问的长度,最后把原来的NN个字符串在AC自动机中跑一遍记录长度满足条件的就能得到答案。由于可能有相同的询问,所以可以利用map或者并查

CantSayAWord的博客 445
上一篇: SPOJ - QTREE Query on a tree 边权LCT
下一篇: HDU - 4010 Query on The Trees LCT点权
我不会额
博客等级 码龄11年 2粉丝 173原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值