CF113B Petr#

大概就是字符串匹配加一个字符串哈希判重。懒得打kmp,就用字符串哈希匹配了。

字符串哈希大概就是把字符串转成一个p进制的数,每一段字符串都有一个对应的哈希值。p尽量取质数,这样不容易冲突。

#include<bits/stdc++.h>
using namespace std;
#define ull unsigned long long
const int N=2005;
const int pr=131;
ull power[N],h[N],b,e;
char t[N],sb[N],se[N];
int tx,ty,x[N],y[N],lt,lb,le,ans;
void pre() {
power[0]=1;
for(int i=1; i<=lt; ++i)
power[i]=power[i-1]*pr,h[i]=h[i-1]*pr+t[i]-'a'+1;
for(int i=1; i<=lb; ++i)b=b*pr+sb[i]-'a'+1;
for(int i=1; i<=le; ++i)e=e*pr+se[i]-'a'+1;
}
ull has(int l,int r) {
return h[r]-h[l-1]*power[r-l+1];
}
unordered_map<ull,bool>mp;
int main() {
scanf("%s%s%s",t+1,sb+1,se+1);
lt=strlen(t+1);
lb=strlen(sb+1);
le=strlen(se+1);
pre();
for(int i=1; i<=lt-lb+1; ++i)
if(has(i,i+lb-1)==b)x[++tx]=i;
for(int i=le; i<=lt; ++i)
if(has(i-le+1,i)==e)y[++ty]=i;
for(int i=1; i<=tx; ++i)
for(int j=1; j<=ty; ++j)
if(x[i]<=y[j]&&y[j]-x[i]+1>=max(le,lb))
{
ull ha=has(x[i],y[j]);
if(!mp[ha])++ans,mp[ha]=true;
}
printf("%d\n",ans);
return 0;
}

Petr#(字符串哈希)的更多相关文章

  1. HDU 1880 魔咒词典(字符串哈希)

    题目链接 Problem Description 哈利波特在魔法学校的必修课之一就是学习魔咒.据说魔法世界有100000种不同的魔咒,哈利很难全部记住,但是为了对抗强敌,他必须在危急时刻能够调用任何一 ...

  2. 洛谷P3370 【模板】字符串哈希

    P3370 [模板]字符串哈希 143通过 483提交 题目提供者HansBug 标签 难度普及- 提交  讨论  题解 最新讨论 看不出来,这题哪里是哈希了- 题目描述 如题,给定N个字符串(第i个 ...

  3. HDU2594 Simpsons’ Hidden Talents 字符串哈希

    最近在学习字符串的知识,在字符串上我跟大一的时候是没什么区别的,所以恶补了很多基础的算法,今天补了一下字符串哈希,看的是大一新生的课件学的,以前觉得字符串哈希无非就是跟普通的哈希没什么区别,倒也没觉得 ...

  4. LA 6047 Perfect Matching 字符串哈希

    一开始我用的Trie+计数,但是不是计多了就是计少了,后来暴力暴过去的…… 看了别人的代码知道是字符串哈希,但是仍有几个地方不理解: 1.26^500溢出问题 2.没考虑哈希碰撞? 跪求指点! #in ...

  5. AC日记——【模板】字符串哈希 洛谷 3370

    题目描述 如题,给定N个字符串(第i个字符串长度为Mi,字符串内包含数字.大小写字母,大小写敏感),请求出N个字符串中共有多少个不同的字符串. 友情提醒:如果真的想好好练习哈希的话,请自觉,否则请右转 ...

  6. 从Hash Killer I、II、III论字符串哈希

    首先,Hash Killer I.II.III是BZOJ上面三道很经典的字符串哈希破解题.当时关于II,本人还琢磨了好久,但一直不明白为啥别人AC的代码都才0.3kb左右,直到CYG神犇说可以直接随机 ...

  7. 【NOIP模拟】Grid(字符串哈希)

    题目背景 SOURCE:NOIP2016-RZZ-1 T3 题目描述 有一个 2×N 的矩阵,矩阵的每个位置上都是一个英文小写字符. 现在需要从某一个位置开始,每次可以移动到一个没有到过的相邻位置,即 ...

  8. 洛谷 P3370 【模板】字符串哈希

    洛谷 P3370 [模板]字符串哈希 题目描述 如题,给定N个字符串(第i个字符串长度为Mi,字符串内包含数字.大小写字母,大小写敏感),请求出N个字符串中共有多少个不同的字符串. 友情提醒:如果真的 ...

  9. cf_514C(字符串哈希)

    题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=121897#problem/G Watto and Mechanism Time ...

随机推荐

  1. jdbc学习一半的代码

    用java连接MySQL的准备工作 1.下载MySQL(了解MySQL的基本语法) 2.下载java的和MySQL的连接 3.在程序中加入2中下载的jar包 写java程序连接数据库的基本步骤: 1. ...

  2. Raspbian设置静态ip

    Raspbian static ip 最近入手了树莓派4b,并更具官方教程安装了Raspbian.由于直接通过wifi连接,每次ip跳来跳去很不方便,于是便想着设置静态ip. 由于Raspbian本身 ...

  3. 5.7 Nginx 其他模块

  4. 移动端web(1)

    引入        <meta name="viewport" content="wcodeth=device-wcodeth, initial-scale=1, ...

  5. Windows Mysql Server重启, log-bin路径配置

    Windows Mysql Server重启, log-bin路径配置 分类: mysql数据库2014-03-16 14:49 1313人阅读 评论(0) 收藏 举报 Mysqlmysql serv ...

  6. Tomcat+JSP经典配置实例

    经常看到jsp的初学者问tomcat下如何配置jsp.servlet和bean的问题,于是总结了一下如何tomcat下配置jsp.servlet和ben,希望对那些初学者有所帮助. 一.开发环境配置 ...

  7. Lua 完美打印数据 (例子)

    例子1 : ableprint = function(data,cstring,deepIndex) --第二个参数可以为空,第三个参数不要手动添加,它是用来进行打印深度控制的. if data == ...

  8. python2学习------基础语法5(文件操作)

    1.文件内容读取 a.txt teestttttttttttttt teestttttttttttttt teestttttttttttttt teestttttttttttttt teesttttt ...

  9. Java设计模式之适配器模式(Adapter)

    通常,在代码已经存在的情况下编写客户端代码(客户端就是需要调用我们代码的对象),开发人员可以采取模拟客户端的方式调用我们提供的接口对象.然而,客户端代码也可能与你的代码单独进行开发,这种情况下,会发现 ...

  10. Spark 资料整理

    http://jerryshao.me/architecture/2013/10/08/spark-storage-module-analysis/ http://blog.csdn.net/aliv ...