当前位置: 首页 > news >正文

hdu 6153 A Secret(KMP)

题目链接:hdu 6153 A Secret

题意:

给你两个字符串a,b,问你对于b的每个后缀在a中出现了多少次,然后输出sum{每个后缀的长度*该后缀在a中出现的次数}。

题解:

将a,b反转一下,然后跑一下kmp,在途中记录一下哪些位置匹配到了。

然后再倒着统计一下答案就行了。

 1 #include<bits/stdc++.h>
 2 #define mst(a,b) memset(a,b,sizeof(a))
 3 #define F(i,a,b) for(int i=(a);i<=(b);++i)
 4 using namespace std;
 5 typedef long long ll;
 6 const int N=1e6+7,P=1e9+7;
 7 int t,lena,lenb,nxt[N],vis[N],ans[N];
 8 char a[N],b[N];
 9 
10 void KMP(int n, char*a, int m, char*b) {
11     int i, j;
12     for (nxt[0] = j = -1, i = 1; i < n; nxt[i++] = j) {
13         while (~j&&a[j + 1] != a[i])j = nxt[j];
14         if (a[j + 1] == a[i])j++;
15     }
16     for (j = -1, i = 0; i < m; i++) {
17         while (~j&&a[j + 1] != b[i])j = nxt[j];
18         if (a[j + 1] == b[i])j++;
19         if(j!=-1)vis[j]++;
20         if (j == n - 1)j = nxt[j];
21     }
22 }
23 
24 int main(){
25     scanf("%d",&t);
26     while(t--)
27     {
28         mst(vis,0),mst(ans,0),scanf("%s%s",a,b);
29         lena=strlen(a),lenb=strlen(b);
30         reverse(a,a+lena);
31         reverse(b,b+lenb);
32         KMP(lenb,b,lena,a);
33         for(int i=lenb;i;i--)
34         {
35             ans[i]+=vis[i-1];
36             if(nxt[i-1]!=-1)ans[nxt[i-1]+1]+=ans[i];
37         }
38         int ret=0;
39         F(i,1,lenb)ret=(ret+(ll)i*ans[i])%P;
40         printf("%d\n",ret);
41     }
42     return 0;
43 
44 }
View Code

 

转载于:https://www.cnblogs.com/bin-gege/p/7401051.html

相关文章:

  • Tomcat入门
  • 表单,正则
  • 第4阶段——制作根文件系统之分析init进程(2)
  • 求点之间是否联通
  • php数组和正则表达式的替换拆分匹配所有
  • OC与Swift混编
  • 算法学习(十一)
  • 【Java核心计算 基础知识(第9版)】第4章 对象与类
  • FPGA之verilog静态数码管小程序
  • 2017 Multi-University Training Contest 2 hdu 6047
  • TSX数据Skysense PS最简操作流程和处理结果视频
  • Java开发者必备的六款工具
  • Android笔记(预安装APK)
  • 14种排序算法和PHP数组
  • TYVJ1340 送礼物
  • python3.6+scrapy+mysql 爬虫实战
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • docker python 配置
  • fetch 从初识到应用
  • MobX
  • QQ浏览器x5内核的兼容性问题
  • Vue2 SSR 的优化之旅
  • 测试如何在敏捷团队中工作?
  • 对JS继承的一点思考
  • 机器学习学习笔记一
  • 检测对象或数组
  • 蓝海存储开关机注意事项总结
  • 码农张的Bug人生 - 见面之礼
  • 前端学习笔记之观察者模式
  • 通过git安装npm私有模块
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • Java性能优化之JVM GC(垃圾回收机制)
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • ​第20课 在Android Native开发中加入新的C++类
  • #pragma预处理命令
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (三)c52学习之旅-点亮LED灯
  • (十八)SpringBoot之发送QQ邮件
  • (算法二)滑动窗口
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .NET Micro Framework初体验(二)
  • .Net 代码性能 - (1)
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化
  • .net(C#)中String.Format如何使用
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • .NET/C# 使用反射注册事件