[2019杭电多校第五场][hdu6629]string matching(扩展kmp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6629
题意求字符串的每个后缀与原串的最长公共前缀之和。
比赛时搞东搞西的,还搞了个后缀数组...队友一说扩展kmp我都自闭了,这不就是扩展kmp的第一步,求原串的每个后缀与原串的最长公共前缀嘛。
需要注意的就是题目准确问的是按照文中所给的代码执行需要判断几次,如果最长公共前缀等于该后缀的长度,则会判断Next[i]次(Next[i]为以i为开始的后缀与原串的最长公共前缀)。如果不等,则会判断Next[i]+1次,因为会判断一次失配。
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<string> 5 #include<algorithm> 6 using namespace std; 7 typedef long long ll; 8 const int maxn = 1e6 + 10; 9 int Next[maxn]; 10 void getN(char *s1) {//求子串与自身匹配 11 int i = 0, j, p, len = strlen(s1); 12 Next[0] = len; 13 while (i + 1 < len&&s1[i] == s1[i + 1]) 14 i++; 15 Next[1] = i; 16 p = 1; 17 for (i = 2; i < len; i++) { 18 if (Next[i - p] + i < Next[p] + p) 19 Next[i] = Next[i - p]; 20 else { 21 j = Next[p] + p - i; 22 if (j < 0) 23 j = 0; 24 while (i + j < len&&s1[j] == s1[i + j]) 25 j++; 26 Next[i] = j; 27 p = i; 28 } 29 } 30 } 31 char s[maxn]; 32 int main() { 33 int t; 34 scanf("%d", &t); 35 while (t--) { 36 scanf("%s", s); 37 int n = strlen(s); 38 getN(s); 39 long long ans = 0; 40 for (int i = 1; i < n; ++i) { 41 if (Next[i] == n - i) ans += n - i; 42 else ans += Next[i] + 1; 43 } 44 printf("%lld\n", ans); 45 46 } 47 }
转载于:https://www.cnblogs.com/sainsist/p/11354745.html
[2019杭电多校第五场][hdu6629]string matching(扩展kmp)相关推荐
- 2019杭电多校 第七场 Kejin Player 6656(求期望值)
2019杭电多校 第七场 Kejin Player 6656(求期望值) 题目 http://acm.hdu.edu.cn/showproblem.php?pid=6656 题意 给你n,q.表示有n ...
- 2019杭电多校第9场1002 Rikka with Cake HDU6681
2019杭电多校第9场1002 Rikka with Cake HDU6681 题意:给你若干个点按上下左右切割平面,最后问平面内有几块被切割开来. 解法1:红黑树+思维+贪心 A:根据欧拉定理可以得 ...
- 【2019.08.21】2019杭电多校第十场
补题地址:http://acm.hdu.edu.cn/listproblem.php?vol=58 题号:6691-6701 1001: 1002: 1003:✅ 1004: 1005:✅ 1006: ...
- 2019 杭电多校第六场 题解
比赛记录 注意随机数据 ,1-n排列这种,一般都有啥暴力重构之类的方法,期望重构次数很少之类的 1005也是这样,因为n^2但只有n个值有数,所以就可以n^2logn 题解 1001 Salty Fi ...
- 2019杭电多校第三场 6608 Fansblog(威尔逊定理+miller_rabin素性测试)
Problem Description 传送门 Farmer John keeps a website called 'FansBlog' .Everyday , there are many peo ...
- 2019 杭电 多校第3场 1006 Fansblog (HDU 6608)
题目链接 题解: 用威尔逊定理变换,然后求逆元. 代码: #include <bits/stdc++.h> using namespace std; typedef long long l ...
- hdu 6656 2019杭电多校第7场 期望题
设f[i]为从i升级到i+1期望需要的金钱,由于每级都是能倒退或者升级到i+1,所以询问从l,r的期望金钱可以直接前缀和,那么推导每一级升级需要的期望钱也可以用前缀和推导 设sum[i]=f[1]+f ...
- 2019杭电多校第7场 K Kejin Player HDU 6656(数学推导)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6656 题目大意:对于每一个等级,可以花ai元,有pi概率升级,如果升级失败就退到xi级,问从li级升到 ...
- 2019杭电多校第七场 HDU - 6656 Kejin Player 期望
题目链接:https://vjudge.net/problem/HDU-6656 题解: 维护一个前缀sum[i] : 从1到 i 的期望 第 i 到达 i + 1是:ai + (1 - r[i] / ...
- 2019杭电多校第七场 HDU - 6656 Kejin Player——概率期望
题意 总共有 $n$ 层楼,在第 $i$ 层花费 $a_i$ 的代价,有 $pi$ 的概率到 $i+1$ 层,否则到 $x_i$($x_i \leq 1$) 层.接下来有 $q$ 次询问,每次询问 $ ...
最新文章
- 三、hbase JavaAPI
- 计算机培训专业中心架,国家高技能人才培养车工培训方案.doc
- 漫谈天际网的用户体验
- 浅谈 Knowledge-Injected BERTs
- Anime4K:目前最热的开源实时动漫放大算法,Github上一周收获2600星!
- C/C++ -- Gui编程 -- Qt库的使用 -- 使用.ui文件
- Mysql 命令行控制事务
- [Java] 蓝桥杯ADV-95 算法提高 字符串比较
- python打电话播放语音_让电话录音也能看得见,录音一键转为文字
- 遗传算法是机器学习算法嘛?_基于遗传算法的机器人控制器方法
- 如何防御sql注入?
- java期末大作业:记事本
- 结构光三维重建阶段性总结
- 计算机应用 2010 成绩,2010西电计算机应用技术考研成绩
- Android部分手机报 解析包时出现问题 原因与解决方法
- java技术及ssh框架和jsp技术的介绍 外文文献及翻译_java技术及ssh框架和jsp技术的介绍 外文文献及翻译.doc...
- C语言:比较三个数(double类型)的大小
- Android自定义控件之RecyclerView打造万能ViewPager TabLayout(仿今日头条Tab滑动、Tab多布局、indicator蠕动、自定义indicator、文字颜色渐变)
- AE/PR插件-去朦胧除雾霾增强色彩对比清晰画面调色插件ClearPlus
- 图谱实战 | 基于金融场景的事理图谱构建与应用
热门文章
- Delphi Sql语句中值的引用
- 统计挖掘那些事(七)—— 如何直观地理解过拟合与欠拟合那些事~
- linux下iptables详解
- JQuery实用技巧--学会你也是大神(1)——插件的制作技巧
- HDU 6122 今夕何夕 【数学公式】 (2017百度之星程序设计大赛 - 初赛(A))
- WebGL 绘制Line的bug(三)
- Python 实现数据结构中的单链表,循环单链表,双链表
- OpenGL学习脚印:深度測试(depth testing)
- lua 日期的一些函数
- 基于react/vue的移动端终极适配方案(更新css-modules配置)