NOIP2017赛前模拟 字符串(AC自动机)

NOIP2017普及组复赛题解 T1 score 题面:(不想看的跳过吧) 无疑,这是一道可以媲美A+B Problem的大水题,刚开始看到,以为要用浮点数操作之类的,但是题目给出A,B,C全部小于等于100并且都为10的倍数,所以就使这道题变成了彻彻底底的水题。 题意大概如此:给出三个均为10的倍数并且小于等于100的整数A,B,C,以整数形式输出A∗20%+B∗30%+C∗50% A * 20\%+B * 30\%+C 阅读详情

题意:
 给你n个单词(字符串T)和一个文章(字符串S),q个询问,每次修改S中的一个字符,然后输出所有单词在文章中的出现次数。一开始输出没有修改时的答案。

题解:
 先将每个单词建一个AC自动机,在没有修改时统计一个答案;
 然后我们发现,每次修改只会影响[pos-mx+1,pos+mx-1] (mx为最长的单词的长度,pos为当前修改的位置)的答案,其余多出的则不会影响;
 所以每次修改时我们只需要先将原来区间内的答案删去,修改之后在将这段区间放到AC自动机上匹配,加上新的答案;
 另外还有注意普通的AC自动机在匹配时对于一个节点,会一直迭代,跳它的fail指针,统计答案,为了避免超时,我们在一开始的时候就将一个节点所有fail指针跳的点的答案累加,后面匹配就不用迭代了

#include<cstdio>
#include<algorithm>
#include<cmath>
#include<ctime>
#include<iomanip>
#include<iostream>
#include<cstring>
#include<string>
#include<cctype>
using namespace std;
int ans,n,tot,qq,pos,mx,len;
int q[100010],tag[100010],fail[100010],f[100010][27];
char ch,s[200010];bool vis[100010];

inline void Insert(){
    int t=0;
    for(int i=1;i<=len;i++){
        if(!f[t][s[i]-'a']) f[t][s[i]-'a']=++tot;
        t=f[t][s[i]-'a'];
    }
    tag[t]++;
}

inline void getfail(){
    int head=0,tail=1,j;q[1]=0;
    while(head^tail){
        j=q[++head];
        if(j)
          for(int i=0;i<26;i++)
            if(f[j][i])
              fail[f[j][i]]=f[fail[j]][i];
          for(int i=0;i<26;i++)
            if(!f[j][i])
              f[j][i]=f[fail[j]][i];
            else q[++tail]=f[j][i];
    }
    for(int i=1;i<=tail;i++)
    {
        int u=q[i],v=fail[u];
        tag[u]+=tag[v];
    }
}


inline int ac(int st,int end){
    int now=0,tmp,ret=0;
    for(int i=st;i<=end;i++){
        now=f[now][s[i]-'a'];
        ret+=tag[now];
    }
    return ret;
}

int main(){
//  freopen("string.in","r",stdin);
    scanf("%d%d",&n,&qq);
    for(int i=1;i<=n;i++){
        scanf("%s",s+1);
        len=strlen(s+1);
        mx=max(mx,len);
        Insert();
    }
    getfail();
    scanf("%s",s+1);len=strlen(s+1);
    ans=ac(1,len);
    cout<<ans<<endl;
    for(int i=1;i<=qq;i++){
        scanf("%d %c",&pos,&ch);
        int l=pos-mx+1,r=pos+mx-1;
        if(l<0) l=0; if(r>len) r=len;
        ans-=ac(l,r);s[pos]=ch;
        ans+=ac(l,r);
        cout<<ans<<endl;
    }
    return 0;
}

后记:
 由于这是我做的第三道AC自动机的题,所以模板不熟练,考试的时候就爆炸了,所以以后应该多做一些这样的题

CSP-J复赛真题保姆级刷题路线图(附洛谷题号与避坑指南) 本文提供CSP-J复赛真题的高效刷题路线图,从零基础到稳定发挥的实战指南。通过分阶段训练策略、洛谷平台的高阶使用技巧以及真题训练中的关键细节把控,帮助选手系统化提升解题能力。特别适合准备CSP-J复赛的选手参考,涵盖真题解析、避坑指南和个性化训练方案。 阅读详情

相关推荐

给IC设计新人的Tessent Scan入门指南:从RTL到ATPG的完整DFT流程解析

本文为IC设计新手提供Tessent Scan的完整DFT流程指南,从RTL代码检查到ATPG测试向量生成,详细解析扫描链配置、插入及验证的关键步骤。通过实战案例和工具命令示例,帮助工程师快速掌握Tessent工具链的应用技巧,提升芯片可测试性设计的效率和质量。

weixin_32541663的博客 451

NOIp2017 题解

Day1 T1 小凯的疑惑 题目传送门 考场上打表搞了一个很奇怪的结论,化简后就是a∗b−a−ba*b-a-ba∗b−a−b。具体证明现在还是不大会。 代码: #include&amp;lt;cstdio&amp;gt; #include&amp;lt;cstring&amp;gt; #include&amp;lt;algorithm&amp;gt; using namespace std; typedef long long LL; LL a...

forezxl的博客 1937

华为防火墙USG6600全流量日志配置指南:从流量监控到NAT日志的完整方案

本文详细介绍了华为USG6600防火墙全流量日志配置方案,涵盖流量监控、NAT日志及安全事件溯源等核心功能。通过精细化配置和性能优化技巧,帮助企业构建高效、合规的日志体系,提升网络安全运维效率。文章特别强调了日志采样与字段过滤的实用方法,适用于高流量环境下的资源优化。

gin88的博客 348

[NOIP模拟][AC自动机]字符串

样例输入: 3 5 ab bc abc acbcb 2 b 3 c 4 a 1 b 3 a 样例输出: 1 2 3 4 2 1 题目分析: 如果没有修改操作就是AC自动机模板题。记录n个字符串T中最长的长度为maxt,每次修改位置pos上的字符,其实它只会影响区间[pos-max

千古的博客 408

Veeam Backup 13 通过UI界面高效备份VMware ESXi虚拟机的完整指南

本文提供了一份使用Veeam Backup 13图形化界面高效备份VMware ESXi虚拟机的完整指南。内容涵盖从环境准备、添加vCenter/ESXi主机、配置备份存储库,到创建备份任务、设置保留策略与计划,以及执行备份和验证成功的关键步骤。通过直观的UI操作,管理员可以轻松实现虚拟机数据的可靠保护与快速恢复。

weixin_29322553的博客 438

RTL8211F千兆PHY原理图与PCB设计:从手册到量产的完整指南

在工业网关、边缘计算和FPGA/CPU以太网扩展设计中,千兆PHY芯片的稳定运行取决于外围电路的精细设计。RTL8211F(I)作为应用广泛的物理层收发器,其原理图设计涉及电源域划分、时钟与复位时序、RGMII/ MDIO接口匹配以及MDI差分网络等多个环节。正确理解数据手册的阅读顺序,掌握100Ω差分阻抗控制、等长约束和EMI布局技巧,是保证链路可靠性和信号完整性的关键。本文从芯片选型与数据手册解析切入,系统梳理从电源去耦到PCB布局布线的工程实践要点,帮助工程师规避Link不稳定、MDIO读取失败、吞吐

weixin_28721917的博客 350

#NOIP模拟赛#相似字符串(树形DP + 状压)

这题是一个状压树DP,有思路可以先想一下,不是特别难(但是我作为一个蒟蒻理解标程看了相当久才彻底想清楚,我的树DP太弱了) 标解写得有点模糊,其实也很清楚,但是我还是想要说一下我对这题思路的理解。 贴出标解: Code:(本人代码,由于本人蒟蒻,,就不写C++11那个版本了,因为感觉自己用不上那个??) #include #include #

ElaineZXY的博客 473

嵌入式学习笔记- 关于电容的纹波电流

纹波电流是导致电解电容发热、影响其寿命的关键交流电流成分。它不是一种特殊的电流,而是电路中必然存在的现象。要重视,不能忽视。必须保证电路中的纹波电流 < 电容的额定纹波电流。电容鼓包爆浆,要怀疑是否是纹波电流过大或电容ESR变大所致。希望这个解释能帮助您彻底理解这个概念!二 电容纹波电流与频率的关系在大多数情况下,频率越高,电容所能承受的额定纹波电流值越大。【个人理解:因为频率越低ESR越大,具体见第三节ESR与频率的关系】下面我为您详细解释为什么会这样,以及在实际应用中如何考虑。

qq_35771411的博客 2194

NOIP模拟赛20191023 T1 string【字符串排序,线段树/无旋Treap】

题目描述: 给定一个由小写字母组成的字符串 s。有 m 次操作,每次操作给 定 3 个参数 l,r,x。如果 x=1,将 s[l]~s[r]升序排序;如果 x=0,将 s[l]~s[r] 降序排序。你需要求出最终序列。 n<=100000 题目分析: 小写字母只有26种。 排序相当于把区间内的所有字母拿出来,然后a,b,c,d…依次放。 容易想到26棵动态开点线段树或者线段树上维护26种字母...

Master.Yi的博客 755

GPU:NVIDIA GPU的发展历史,nvidia-smi的简介、安装、使用方法之详细攻略

GPU:NVIDIA GPU的发展历史,nvidia-smi的简介、安装、使用方法之详细攻略 目录 NVIDIA GPU的发展历史 nvidia-smi的简介 1、nvidia-smi是nvidia 的系统管理界面解释相关参数含义 2、NVIDIA系统管理接口——v388.73 3、支持产品: nvidia-smi的安装 nvidia-smi的使用方法 1、列出所有可用的 NVIDIA 设备命令 2、nvidia-smi的基础命令用法 NVIDIA GPU的发展历

头部AI社区如有邀博主AI主题演讲请私信—心比天高,仗剑走天涯,保持热爱,奔赴向梦想!低调,专注,谦虚,自律,反思,成长,还算比较正能量的博主,公益免费传播…内心特别想在AI界做出一些可以推进历史进程影响力的技术(兴趣使然,有点小情怀,也有点使命感呀 1万+

YOLOv8 | 损失函数改进,最新提出的Shape-IoU,有效涨点

作为检测器定位分支的重要组成,边框回归损失在目标检测任务中发挥巨大作用。现有的边框回归方法,通常考虑了GT框与预测框之间的几何关系,通过使用边框间的相对位置与相对形状等计算损失,而忽略了边框其自身的形状与尺度等固有属性对边框回归的影响。为了弥补现有研究的不足,本文提出聚焦边框自身形状与尺度的边框回归方法。首先我们对边框回归特性进行分析,得出边框自身形状因素与尺度因素会对回归结果产生影响。

kay_545 1913

GDOI2019赛前反思

照例每次大赛前要开这篇博客来总结的。 最近的模拟赛打的和shit一样,但是别人的省选成绩还行?好像都进队了。 对了,GDOI这么毒,4h4题,不能以正常的思维来想 估计今年的题肯定要比去年的day1、2甚至day3还要难,首先去年的题整体偏水,day3的话思维难度低了点,毕竟是拼题OI嘛。 而且今年只有两天,名字直接改成了GDSOI,这是不是预示难度要回到两年前那种不到十个人切题? 应该也不至于,...

Cold_Chair的博客 851

YOLOv11改进 | 主干/Backbone篇 | 轻量化目标检测网络MobileViTv1改进yolov11有效涨点

本文给大家带来的改进机制是MobileViT系列的V1版本,其作为MobileNet网络的挑战者,其效果自然不用多说,MobileViT模型是为移动设备设计的轻量级、通用目的视觉变换器。它融合了卷积神经网络(CNN)和视觉变换器(ViT)的优势,旨在在保持高效性能的同时减少模型参数和降低延迟。通过其创新的MobileViT Block和多尺度训练方法,MobileViT在多个视觉任务上取得了优异的结果,欢迎大家订阅本专栏,本专栏每周更新3-5篇最新机制,更有包含我所有改进的文件和交流群提供给大家。

Snu77的博客 2336

致敬 2017NOIP

2017年NOIP年度总结 然而学了没一年 怎么说呢 ,就和做了一场极不真实的梦一样,迷迷糊糊就考完了。 在等待考试之前还是有一点紧张的,不知道该复习什么,感觉什么都不会,而什么都有可能考到,内心是有一点焦灼的。结果在考试前一天也就和大佬们口胡了一下线段树,树状数组,优先队列什么的,结果还真的考了一个树状数组的题(不过可惜的是 没看出来,况且也不会打树状数组(这就十分尴尬了));在头一

zRNA__的博客 505

老版QQ原生表情gif动态

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

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【模拟赛】qbxt金秋冲刺训练营杯NOIP模拟赛第一场总结

前言 虽然是赛后自己测 但也是完完整整的打了一遍模拟赛 断断续续牵扯了两天半的精力

ars4me 482

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

NOIP2017赛前考试注意事项总结

  考前:   考试前把读入优化和库以及对拍文件打好做好准备工作,另外注意放松心态,太紧张了肯定考不好··将自己的注意力集中起来   考场策略:   考试的基本策略是对每于道题先想个20分钟,如果想不出个靠谱的方法就把赶紧暴力打了一定要打暴力,想不出正解要打暴力,想出了正解对拍也要打暴力,而且把暴力打了之后心里都踏实得多··起码保底了,打完后再想正解.   题目思考: ...

weixin_30687811的博客 79

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

2020牛客NOIP赛前集训营-提高组(第二场)C 前缀

题目 传送门 题目描述 牛牛有一个sss串,sss串仅由262626个小写英文字母组成,他现在将sss串进行了无限次的复制扩展成了一个无限循环串。 例如一开始s=“abc”s=“abc”s=“abc”,那么牛牛就会将其变为“abcabcabc...”“abcabcabc...”“abcabcabc...” 若某个字符串保留其原本字符出现的顺序,并且按照顺序取出若干个字符。可以不连续,可以不取。 我们称取出的这若干个字符连成的字符串为一个子序列。 若连续取出某个字符串的前kkk个字符,组成一个子串,我们称该字

Mentallyhand的博客 386

CSP-J/S2025的总结与启示

这篇博文详细记录了作者参加CSP-J/S2025竞赛的全过程。文章首先列举了考前进行的多场模拟赛成绩,展现了从零分到400分的波动进步。随后详细描述了正式考试的答题情况:CSP-J组顺利完成四题,CSP-S组在部分题目遇到困难。作者对赛后在不同平台的评测结果进行了全面分析,发现存在优化空间和失误(如第三题未用map优化、第四题数组开小)。最后总结出四点经验教训:需提升知识点储备、加强观察能力、提高编程速度、增加练习量。文章真实呈现了竞赛选手的备赛心路历程,为后续参赛者提供了有价值的参考。

bz02_2023f2的博客 1100

NOIP2015TG记

NOIP2015TG ——ByJim·H NOIP2015,呵呵 本着大无畏的精神报了TG,弥补去年什么比赛都没去的遗憾。没想到还不错。(也就只有纪中敢把初二丢上去呵,正所谓输赢不是重点,锻炼到就好了嘛~~~) 230+150=380 2015.11.6  Fri Day 0 晚上也没什么,看电视,看手机,11点多的时候把我们叫到一起开会,主要还是讲讲注意的东西什么的。回去看电影,睡觉

Never give in. 1220

牛客网NOIP赛前集训营-普及组

第一场: A-绩点 题目描述 小A刚考完大学考试。现在已经出了n门课的成绩,他想自己先算一下这些课的绩点是多少。设第i门课的他拿到的绩点是gpai,而这门课的学分是sci,那么他的总绩点用下面的公式计算: , 换言之,设S为sci的和,T为gpai与sci的乘积的和。那么小A的绩点就是T除以S的值。 ...

weixin_30608503的博客 406

NOIP2012复习提纲

NOIP2012复习提纲 一、高精度计算 a) 高精度加法 b) 高精度减法 c) 高精度乘法 d) 高精度除以低精度 e) 压位高精 f) 二进制模拟高精度运算(见tyvj某模拟题第一题题解,用位运算) 二、排序 a) 选择排序 b) 冒泡排序 c) 插入排序 d) 希尔排序 e) 快速排序 f) 堆排序 g) 二叉树排序 h) 基数排序 i) 计数排序 j)

da_fan_shu_的专栏 443

ISBN校验码实现:字符串清洗+加权模11校验逻辑

ISBN校验码是典型的字符串规则校验问题,其核心原理为对前9位数字按权重1~9加权求和,再对11取模,将余数映射为0~9或'X'字符。该机制属于轻量级数据完整性校验,在工程中广泛应用于图书编码、身份证号、银行卡号等场景,具备高错误检出率与低计算开销的技术价值。实际开发中需重点处理输入格式不确定性(如连字符位置不固定)、字符类型安全转换(数字字符与整数互转)、以及模运算结果到校验字符的精确映射(余数10必须转为大写'X')。本文围绕NOIP2008真题,详解从规则理解、字符串清洗、加权求和到校验比对的完整落地

weixin_34166472的博客 388

HASC集训总结

哦

Lawliet_Atticus的博客 1093

【XJOI-NOIP16提高模拟训练9】题解。

http://www.hzxjhs.com:83/contest/55 说实话这次比赛真的很水。。然而我只拿了140分,面壁反思。 第一题: 发现数位和sum最大就是9*18,k最大1000,那么sum*k最大不过2*10^5,若能被x整除,则x也不超过200000,暴力即可。 不知道学军OIlonglong用%I64d还是%lld输入,用了%I64d爆零。。改成lld就AC了。 ...

weixin_30651273的博客 93
上一篇: NOIP2017模拟 拆墙 (最大生成树)
下一篇: NOIP2017赛前模拟 (2017.10.17)考试总结
Amessal
博客等级 码龄10年 9粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值