最近在学习字符串的知识,在字符串上我跟大一的时候是没什么区别的,所以恶补了很多基础的算法,今天补了一下字符串哈希,看的是大一新生的课件学的,以前觉得字符串哈希无非就是跟普通的哈希没什么区别,倒也没觉得有什么特别大的用处,敲一敲才发现其实讲究还是比较多的。哈希冲突是常有的事,换一下mod,换一下进制数才有可能过,另外一种说法是用两个互质的量做hash,如果两个都相等的话那冲突就会少很多,这个倒没有做过多大的尝试,侥幸地过了一下这道题

#pragma warning(disable:4996)
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<string>
#include<algorithm>
#define maxn 50000
#define mod 40157
#define xx 133
using namespace std; char s[maxn + 50];
char t[maxn + 50]; int h1[maxn + 50];
int h2[maxn + 50];
int xpow[maxn+50]; int main()
{
xpow[0] = 1;
for (int i = 1; i <= maxn + 20; i++)
xpow[i] = xpow[i - 1] * xx%mod;
while (~scanf("%s%s", s + 1,t + 1))
{
h1[0] = h2[0] = 0;
int n = strlen(s+1), m = strlen(t+1);
for (int i = 1; i <= n; i++) h1[i] = (h1[i - 1] * xx%mod + s[i])%mod;
for (int i = 1; i <= m; i++) h2[i] = (h2[i - 1] * xx%mod + t[i])%mod;
int ans = 0;
int len = min(n, m);
for (int i = 1; i <= len; i++){
int lhs = (h1[i] - h1[0] * xpow[i] % mod + mod) % mod;
int rhs = (h2[m] - h2[m - i] * xpow[i]% mod + mod) % mod;
if (lhs == rhs) ans = i;
}
if (!ans) puts("0");
else{
for (int i = 1; i <= ans; i++){
printf("%c", s[i]);
}
printf(" %d\n", ans);
}
}
return 0;
}

最新文章

  1. HDU 1005 F(Contest #1)
  2. stm32——Flash读写
  3. SQL Server 事务与锁
  4. python【第十二篇下】操作MySQL数据库以及ORM之 sqlalchemy
  5. nest &#39;for&#39; loop.
  6. MVC4重复提交
  7. H264帧内预测模式编号的编码过程
  8. UVa 12100 Printer Queue (习题 5-7)
  9. 【Android Widget】2.ImageView
  10. IDEA安装vue开发插件
  11. SpringMVC之Ajax与Controller交互
  12. vue-cli 最强指南
  13. 部落划分Group[JSOI2010]
  14. Xamarin.Android 制作搜索框
  15. Kotlin中与Java不同的地方 需要注意
  16. Python_time模块
  17. .NET Core开发日志——配置
  18. mysql数据库介绍
  19. FireDAC 下的 Sqlite [4] - 创建数据库
  20. great tips in soapui

热门文章

  1. idea基本
  2. Git tricks: Unstaging files
  3. Ubuntu16.04.1 安装Redis-Cluster
  4. windows bat脚本实现ftp自动下载 删除
  5. SQLite简易入门
  6. Translation perface: &lt;&lt;Professional JavaScript for Web Developers, 3rd Edition&gt;&gt;
  7. 《.NET简单企业应用》项目开发环境
  8. SVN备份教程(三)
  9. c++线程传参问题
  10. TypeError: Object #&lt;IncomingMessage&gt; has no method &#39;flash&#39;