JZOJ 1598 文件修复
2016-04-15 19:07
357 查看
Description
有一个文件被破坏了,可是值得庆幸的是,只是文件的顺序被打乱了。文件仅包含大小写的拉丁字母以及逗号,句号和叹号。为了尽快修复,请你找出有多少个至少出现两次的子串。比如字符串abbabc,子串”a”,”b”,”ab”分别出现了2次,3次,2次。
Analysis
这题是很水的SA了。首先构造出height,然后至少出现两次的子串怎么算呢?
如下,有3个串
A:aba
B:aabbb
C:aabaaa
设当前做到B和C,B和C的LCT是3,也即会有aab,aa,a这三个串出现了两次以上,所以要把LCT(B,C)加进答案。
但是这样算会有重复,“a”在算LCT(A,B)时已经算过了。所以我们还要减去LCT(A,B)。
这个算法是正确的。因为后缀是排序好的,所以不可能会有这种情况:
A:a
B:aba
C:bab
D:abaa
E:abaaa
所以多次出现过的总会被减去。
Code
int main() { scanf("%s",s+1); n=strlen(s+1); DA(); getheight(); int ans=0; fo(i,2,n) ans+=max(0,height[i]-height[i-1]); printf("%d",ans); return 0; }
相关文章推荐
- spring webflow getting start
- TimesTen 应用层数据库缓存学习:7. 同步读写缓存
- red5服务器基础之red5环境的安装配置
- ios UIImagePickerController简单说明
- java反射以获取父类属性的值
- 新增数据文件导致dataguard同步异常
- 利用JS做到隐藏div和显示div
- 第四篇笔记
- MUI_Ajax
- POJ 3684 Physics Experiment
- SPOJ 7258 SUBLEX 后缀自动机
- JAVA 反射总结
- 电影节(SDUT_2797)
- 剑指offer(三)之二维数组中的查找
- requests的介绍和学习
- python资料全集
- 定义含有min函数的栈
- linux c/c++ 后台开发之—连接池
- 手把手教你玩Instrunments
- 算法与数据机构学习_第一章.栈和队列_1.设计一个有返回栈中最小元素功能的栈