首页 > 其他分享 >【模板】AC自动机(不同模板,不同难度)

【模板】AC自动机(不同模板,不同难度)

时间:2024-11-28 12:10:59浏览次数:4  
标签:AC int 不同 模板 自动机 难度

**注意 query() 函数**

#include <bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int n;
char s[N],t[N];

struct AC {
	int cnt,fail;
	int child[27];
}tr[N<<1]; int tot;

void build(char s[]) {
	int len=strlen(s+1);
	int u=0;
	for(int i=1;i<=len;i++) {
		if(!tr[u].child[s[i]-'a'+1]) {
			tr[u].child[s[i]-'a'+1]=++tot;
		}
		u=tr[u].child[s[i]-'a'+1];
	}
	tr[u].cnt++;
}

queue<int> que;
void getfail() {
	int u=0;
	for(int i=1;i<=26;i++) {
		if(tr[u].child[i]) {
			tr[tr[u].child[i]].fail=u;
			que.push(tr[u].child[i]);
		}
	}
	
	while(!que.empty()) {
		u=que.front(); que.pop();
		for(int i=1;i<=26;i++) {
			if(tr[u].child[i]) {
				tr[tr[u].child[i]].fail=tr[tr[u].fail].child[i];
				que.push(tr[u].child[i]);
			}
			else {
				tr[u].child[i]=tr[tr[u].fail].child[i];
			}
		}
	}
}

void query(char t[]) {// Warning !!!!!!!!!!!!!!!!!!!!!!
	int u=0;
	int len=strlen(t+1);
	int ans=0;
	for(int i=1;i<=len;i++) {
		u=tr[u].child[t[i]-'a'+1];
		for(int t=u;t&&tr[t].cnt;t=tr[t].fail) {
			ans+=tr[t].cnt;
			tr[t].cnt=0;
		}
	}
	printf("%d",ans);
}

int main() {
	scanf("%d",&n);
	for(int i=1;i<=n;i++) {
		scanf("\n%s",s+1);
		build(s);
	}
	getfail();
	scanf("\n%s",t+1);
	query(t);
	return 0;
}

标签:AC,int,不同,模板,自动机,难度
From: https://www.cnblogs.com/UeesugiSakura/p/18574032

相关文章

  • [React]setState调用过于频繁的问题
    来自:文心一言在React中,如果setState被调用得太频繁,可能会出现状态没有按预期更新的情况。这是因为React为了性能优化,会批量更新状态,即便是连续快速调用setState,最终状态的更新仍会在一次渲染中执行。如果你尝试在某些异步操作(如事件监听器、网络请求或循环中)中连续多次调用setSt......
  • 【热门主题】000067 React前端框架:探索高效Web开发之路
    前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦......
  • 【Golang】 package main is not in GOROOT (....)
    “packagemainisnotinGOROOT(/usr/local/go/src/main)”是Go工具链报的一个常见错误,通常是因为代码文件的路径或设置有问题。原因分析:代码路径问题:该错误表明Go正在尝试查找代码文件packagemain,但文件路径设置不正确。Go的工具链期望代码文件位于工作目录......
  • 论文解读《Neural Cleanse: Identifying and Mitigating Backdoor Attacks in Neural
    发表时间:2019期刊会议:IEEESymposiumonSecurityandPrivacy(S&P)论文单位:UCSantaBarbara论文作者:BolunWang,YuanshunYao,ShawnShan,HuiyingLi,BimalViswanath,HaitaoZheng,BenY.Zhao方向分类:BackdoorAttack论文链接开源代码摘要深度......
  • 使用logback集成logstash 达到ELK日志收集目的
    一、maven引入net.logstash.logbacklogstash-logback-encoder7.2二、配置文件配置logback-logstash.xmllogback-logstash.xml的配置信息<!--输出到logstash的appender--><appendername="logstash"class="net.logstash.logback.appender.LogstashTcpSocketApp......
  • Oracle系列---【关闭归档日志】
    1.问题数据库突然不能用了,排查后发现磁盘满了,清完归档日志之后,释放掉一半的磁盘空间,过一夜很快又满了,测试环境,为了节省资源决定关闭归档日志。2.查看是否开启归档日志#查看归档日志是否开启,使用sqlplus查询SQL>SELECTLOG_MODEFROMV$DATABASE;#或者SQL>ARCHIVELOGL......
  • Oracle生成awr报告操作步骤
    1、cmd命令窗口 以sysdba身份登录Oracle 2、执行@?/rdbms/admin/awrrpt命令,并选择报告类型为HTML。输入天数以选择生成报告的时间段,一般默认为最近7天。输入报告开始和结束时间对应的快照ID。输入报告名称,如awr.html,系统将自动生成并显示报告名。 3.查看AWR报告。AWR报告......
  • webpack5提升打包构建速度(四)
    1、SourceMap:找到映射后源代码出错位置SourceMap(源代码映射)是一个用来生成源代码与构建后代码一一映射的文件的方案。它会生成一个xxx.map文件,里面包含源代码和构建后代码每一行、每一列的映射关系。当构建后代码出错了,会通过xxx.map文件,从构建后代码出错位置找到映射后......
  • ABAP 通过模板上传文件进行批导
    主要实现了以下步骤:1、让用户下载模板。2、根据模板填写数据选择文件进行上传。3、根据用户数据进行存在性判断,存在则可以改,不存在不可以修改。4、通过BAPI或者BDC实现程序自动批量修改。5、将修改结果显示给用户,失败给出失败信息,消息灯变红,成功显示成功,消息灯为绿。具体......
  • EasyStack易捷行云:CRM助力经营管理再上新台阶
    “我们的数字化建设是从CRM开始的。”在「EasyStack易捷行云运营发展副总裁刘斌」看来,CRM的引入,对于公司数字化转型发展以及精细化管理起到了至关重要的作用,于是,在后续面对新功能模块开发需求时,他毅然决然再次选择了纷享销客,两期的CRM赋能支持,助力EasyStack易捷行云经营管理再上新......