HDU 2087 剪花布条 (字符串哈希)
http://acm.hdu.edu.cn/showproblem.php?pid=2087
代码:
#include <bits/stdc++.h>
using namespace std; long long mod = 1e9 + 7;
long long base = 131LL; const int maxn = 1e5 + 10;
char s[maxn], t[maxn];
int lens, lent; long long b[maxn], sum[maxn], u[maxn]; long long Query(int L, int R) {
long long res = sum[R];
if(L - 1 >= 0) res = (res - sum[L - 1] + mod) % mod;
return res;
} int main() {
u[0] = 1LL;
for(int i = 1; i < maxn; i ++)
u[i] = u[i - 1] * base % mod; while(~scanf("%s", s)) {
lens = strlen(s);
if(lens == 1 && s[0] == '#') {
break;
} scanf("%s", t);
lent = strlen(t); long long hasht = 0;
for(int i = 0; t[i]; i ++) {
hasht = hasht * base % mod;
hasht = (hasht + t[i]) % mod;
} long long pow = 1LL;
for(int i = lens - 1 ; i >= 0; i --) {
b[i] = pow * s[i] % mod;
pow = pow * base % mod;
} sum[0] = b[0];
for(int i = 1; i < lens; i ++) {
sum[i] = (sum[i - 1] + b[i]) % mod;
} int ans = 0;
int p = 0;
while(p < lens) {
if(p + lent - 1 >= lens) break;
int L = p, R = p + lent - 1;
if(Query(L, R) == (hasht * u[lens - 1 - R] % mod)) {
ans ++;
p = p + lent;
} else p ++;
} printf("%d\n", ans);
}
return 0;
}
字符串哈希就是把一个字符串变成 int 存起来, 然后对 1e9 + 7 取模, $b[i] = s[i]*{131}^{s.length() - 1 - i}$ ,sum[i] 存的是 b[i] 的前缀和
问题是求在 s 字符串中有多少个 t 字符串 先求出来 t 的哈希值 hasht 然后遍历 s ,Query 函数求 s 字符串中 L R 这一段字符的哈希值
HDU 2087 剪花布条 (字符串哈希)的更多相关文章
- HDU 2087 剪花布条(字符串匹配,KMP)
HDU 2087 剪花布条(字符串匹配,KMP) Description 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出 ...
- HDU 2087 剪花布条【在字符串中不可重叠地寻找子串数量】
一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢? Input输入中含有一些数据,分别是成对出现的花布条和 ...
- HDU 2087 - 剪花布条 - [KMP算法]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2087 Time Limit: 1000/1000 MS (Java/Others) Memory Li ...
- HDU 2087 剪花布条 (KMP 不允许重叠的匹配)
题目链接 Problem Description 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢? Inp ...
- HDU 2087 剪花布条 (简单KMP或者暴力)
剪花布条 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- hdu 2087剪花布条 (KMP入门 子串出现的次数和子串个数)
剪花布条 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- HDU 2087 剪花布条(模式串在主串中出现的次数主串中子串不可重叠)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2087 题意:求模式串在主串中出现的次数,与模式串匹配的子串之间不可重叠. 思路:用kmp算法解决,在匹 ...
- HDU-2087 剪花布条 字符串问题 KMP算法 查匹配子串
题目链接:https://cn.vjudge.net/problem/HDU-2087 题意 中文题咯 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条, ...
- (KMP)剪花布条 -- hdu -- 2087
http://acm.hdu.edu.cn/showproblem.php?pid=2087 剪花布条 Time Limit: 1000/1000 MS (Java/Others) Memory ...
随机推荐
- 寒假训练 A - A Knight's Journey 搜索
Background The knight is getting bored of seeing the same black and white squares again and again an ...
- ethereum/EIPs-1
https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1.md 介绍了什么是EIP等等的详细信息: eip title status type a ...
- 在Windows中安装PostgreSQL
在Windows中安装PostgreSQL 虽然PostgreSQL是为类UNIX平台开发的,但它却是可以移植的.从7.1版本开始,PostgreSQL可以编译安装和作为一个PostgreSQL服务器 ...
- Linux系统学习之网络管理
网络接口配置 使用ifconfig检查和配置网卡 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ...
- Opencv——相机标定
相机标定的目的:获取摄像机的内参和外参矩阵(同时也会得到每一幅标定图像的选择和平移矩阵),内参和外参系数可以对之后相机拍摄的图像就进行矫正,得到畸变相对很小的图像. 相机标定的输入:标定图像上所有内角 ...
- ASP 基础一 基本语法
一 声明变量 二 给变量赋值 三 循环 四 case <html> <head title="test hello world"> </head> ...
- RBAC 基于权限的访问控制 serviceaccount -- clusterRole clusterRoleBinding
1.Role , RoleBinding 的作用对象都是namespace. 2.通过RoleRef,可以看到,RoleBinding对象通过名字,直接引用前面定义的Role,实现subject(us ...
- android之WIFI小车编程详述
有了前几篇wifi模块eps8266的使用,单片机设置eps8266程序,android TCP客户端,现在就做一个wifi小车 先上图 小车是四个轮子的,每个轮子上都有电机驱动,前进后退的时候四个轮 ...
- IIS导入.pfx证书时报错:"A specified logon session does not exist. It may already have been terminated."
在IIS中可以直接导入.pfx文件来给站点绑定https协议: 如果在导入.pfx文件时,不选择"Allow this certificate to be exported"的话 ...
- BZOJ1185 HNOI2007 最小矩形覆盖 凸包、旋转卡壳
传送门 首先,肯定只有凸包上的点会限制这个矩形,所以建立凸包. 然后可以知道,矩形上一定有一条边与凸包上的边重合,否则可以转一下使得它重合,答案会更小. 于是沿着凸包枚举这一条边,通过旋转卡壳找到离这 ...