zufe-机智的zhourist
2016-04-21 18:42
435 查看
Problem E: 机智的zhourist
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 22 Solved: 7
[Submit][Status][Web
Board]
Description
这一天,ZUFE信息管理与工程学院收到了来历不明的信息,经过艰难的破译,信息被翻译成了一串字符串,以及两种操作:[align=center]push x[/align] | [align=center]在字符串的最后加上一个字母[/align] |
[align=center]pop[/align] | [align=center]删除字符串最后一个字母[/align] |
Input
多组测试数据。每组测试数据第一行输入n,m(n表示初始字符长度,m表示操作次数)
0<n,m<=100000
保证操作过程中字符串不为空。保证字符只有小写字母
Output
对于每个操作,输出该操作结束后字符串的循环次数。
Sample Input
5 3ababa
push b
pop
pop
Sample Output
31
2
HINT
样例解释,第一个操作加入了b,变成了ababab最小循环节是ab,循环次数是3第二个操作弹出b,变成了ababa,最小循环节是ababa,循环次数是1
第三个操作,弹出a,变成了abab,最小循环节是ab,循环次数是2
#include <iostream> #include <stdio.h> #include <string.h> using namespace std; const int maxn=2e5+10; char s[maxn],ch[maxn]; int nt[maxn]; void getnext(int x) { int k=nt[x]; while(k>=0&&s[k]!=s[x]) { k=nt[k]; } nt[x+1]=k+1; } int main() { int n,m; while(~scanf("%d%d",&n,&m)) { scanf("%s",s); nt[0]=-1; for(int i=0; i<n; i++) getnext(i); while(m--) { scanf("%s",ch); if(!strcmp("pop",ch)) { n--; printf("%d\n",n%(n-nt )?1:n/(n-nt )); } else { scanf("%s",ch); s =ch[0]; getnext(n++); printf("%d\n",n%(n-nt )?1:n/(n-nt )); } } } return 0; }
相关文章推荐
- angular学习(三)—— Controller
- mac 下 sublime 如何直接运行 javascript
- 半期考html5小游戏制作
- 【CSS3进阶】酷炫的3D旋转透视
- 利用JS实现点击按钮后图片自动切换
- Html学习笔记3
- 框架之浅入浅出
- UVA_497_Strategic Defense Initiative
- javascript AES加密解密,AES/ECB/PKCS7
- AngularJS的学习
- html5 api
- h5 优化
- 在mvvm 开发模式下使用JSonModel解析数据
- 前端学习之《JavaScript DOM 编程艺术》读书笔记(4)
- JavaScript界面演示 快速排序
- undefined reference to 解决
- css小三角
- 在AngularJS中使用jQuery的zTree插件的方法
- 如何调试异步加载的js文件
- 谈谈AngularJS中的一次性数据绑定