题目链接传送门

题解:

  利用KMP的fail失配数组,快速找到当前后缀与前缀的公共前缀点

#include<bits/stdc++.h>
using namespace std;
#pragma comment(linker, "/STACK:102400000,102400000")
#define ls i<<1
#define rs ls | 1
#define pii pair<int,int>
#define MP make_pair
typedef long long LL;
typedef unsigned long long ULL;
const long long INF = 1e18+1LL;
const double pi = acos(-1.0);
const int N = 2e6+, M = 1e3+,inf = 2e9; int fail[N],vis[N],n,Q,cnt,op[N],QQ[N];
char a[N],b[N],ch[N][];
int sum[N];
void build_fail() {
memset(fail,-,sizeof(fail));
int j = -;
for(int i = ; i < cnt; ++i) {
while(j!=-&&b[j+]!=b[i]) j = fail[j];
if(b[j+] == b[i]) j++;
fail[i] = j;
}
}
int len[N];
int main() {
scanf("%d%d",&n,&Q);
scanf("%s",a);
for(int i = ; i < n; ++i) b[i] = a[i];
cnt = n;
len[] = n;
for(int i = ; i <= Q; ++i) {
scanf("%d",&op[i]);
len[i] = len[i-];
if(op[i] == ) {
scanf("%s",ch[i]);
b[cnt++] = ch[i][];
len[i]+=;
}
else if(op[i] == ) QQ[cnt-] = ;
}
build_fail();
for(int i = ; i < cnt; ++i) {
sum[i] = QQ[i];
if(fail[i]!=-) {
sum[i] += sum[fail[i]];
}
}
int ccnt = n;
for(int i = ; i <= Q; ++i) {
if(op[i] == ) {
ccnt++;
}
else if(op[i] == ) {
vis[ccnt-] = ;
}
else if(op[i] == ) {
int ret = ;
if(vis[ccnt-]) ret = sum[ccnt-];
else ret = sum[ccnt-] - QQ[ccnt-];
printf("%d\n",ret);
}
}
return ;
}

最新文章

  1. sublime text 插件
  2. Python学习第一天 -- 简单的属性、 语法学习
  3. java中运算符的解析和计算
  4. slot signal机制
  5. 《linux 内核全然剖析》 chapter 2 微型计算机组成结构
  6. 使用开源库MagicalRecord操作CoreData
  7. Luence简单实现1
  8. Unity3d Shader开发(三)Pass(Color, Material, Lighting )
  9. JSTL详解
  10. 算法模板——平衡树Treap
  11. [转] vue自定义组件(通过Vue.use()来使用)即install的使用
  12. mysql 数据库主从同步
  13. v-for key
  14. ElasticSearch 2 (13) - 深入搜索系列之结构化搜索
  15. Xcode打包踩过的那些坑
  16. Eclipse中Ant的配置与测试
  17. eclipse下载与安装并测试
  18. lombok java代码助手
  19. Apache mahout 源码阅读笔记-DataModel之UserBaseRecommender
  20. D3.js 使用心得

热门文章

  1. 【Kubernetes】离线业务:Job与CronJob
  2. [BZOJ2733] [HNOI2012]永无乡(并查集 + 线段树合并)
  3. [ZJOI2005]午餐 (贪心,动态规划)
  4. es6 箭头函数 map、find
  5. PHP中使用GD库方式画时钟
  6. 【BZOJ1208】宠物收养所(splay)
  7. 更全的bootstrap教程连接
  8. msp430项目编程57
  9. msp430项目编程43
  10. js判断手机的横竖屏调整样式