http://acm.hdu.edu.cn/showproblem.php?pid=2087

Problem Description
一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案。对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢?
 
Input
输入中含有一些数据,分别是成对出现的花布条和小饰条,其布条都是用可见ASCII字符表示的,可见的ASCII字符有多少个,布条的花纹也有多少种花样。花纹条和小饰条不会超过1000个字符长。如果遇见#字符,则不再进行工作。
 
Output
输出能从花纹布中剪出的最多小饰条个数,如果一块都没有,那就老老实实输出0,每个结果之间应换行。
 
Sample Input
abcde a3 aaaaaa aa #
 
Sample Output
0 3
 

代码:

#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 剪花布条 (字符串哈希)的更多相关文章

  1. HDU 2087 剪花布条(字符串匹配,KMP)

    HDU 2087 剪花布条(字符串匹配,KMP) Description 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出 ...

  2. HDU 2087 剪花布条【在字符串中不可重叠地寻找子串数量】

    一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢?  Input输入中含有一些数据,分别是成对出现的花布条和 ...

  3. HDU 2087 - 剪花布条 - [KMP算法]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2087 Time Limit: 1000/1000 MS (Java/Others) Memory Li ...

  4. HDU 2087 剪花布条 (KMP 不允许重叠的匹配)

    题目链接 Problem Description 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢? Inp ...

  5. HDU 2087 剪花布条 (简单KMP或者暴力)

    剪花布条 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  6. hdu 2087剪花布条 (KMP入门 子串出现的次数和子串个数)

    剪花布条 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  7. HDU 2087 剪花布条(模式串在主串中出现的次数主串中子串不可重叠)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2087 题意:求模式串在主串中出现的次数,与模式串匹配的子串之间不可重叠. 思路:用kmp算法解决,在匹 ...

  8. HDU-2087 剪花布条 字符串问题 KMP算法 查匹配子串

    题目链接:https://cn.vjudge.net/problem/HDU-2087 题意 中文题咯 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条, ...

  9. (KMP)剪花布条 -- hdu -- 2087

    http://acm.hdu.edu.cn/showproblem.php?pid=2087 剪花布条 Time Limit: 1000/1000 MS (Java/Others)    Memory ...

随机推荐

  1. 寒假训练 A - A Knight's Journey 搜索

    Background The knight is getting bored of seeing the same black and white squares again and again an ...

  2. ethereum/EIPs-1

    https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1.md 介绍了什么是EIP等等的详细信息: eip title status type a ...

  3. 在Windows中安装PostgreSQL

    在Windows中安装PostgreSQL 虽然PostgreSQL是为类UNIX平台开发的,但它却是可以移植的.从7.1版本开始,PostgreSQL可以编译安装和作为一个PostgreSQL服务器 ...

  4. Linux系统学习之网络管理

    网络接口配置 使用ifconfig检查和配置网卡 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ...

  5. Opencv——相机标定

    相机标定的目的:获取摄像机的内参和外参矩阵(同时也会得到每一幅标定图像的选择和平移矩阵),内参和外参系数可以对之后相机拍摄的图像就进行矫正,得到畸变相对很小的图像. 相机标定的输入:标定图像上所有内角 ...

  6. ASP 基础一 基本语法

    一 声明变量 二 给变量赋值 三 循环 四 case <html> <head title="test hello world"> </head> ...

  7. RBAC 基于权限的访问控制 serviceaccount -- clusterRole clusterRoleBinding

    1.Role , RoleBinding 的作用对象都是namespace. 2.通过RoleRef,可以看到,RoleBinding对象通过名字,直接引用前面定义的Role,实现subject(us ...

  8. android之WIFI小车编程详述

    有了前几篇wifi模块eps8266的使用,单片机设置eps8266程序,android TCP客户端,现在就做一个wifi小车 先上图 小车是四个轮子的,每个轮子上都有电机驱动,前进后退的时候四个轮 ...

  9. 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"的话 ...

  10. BZOJ1185 HNOI2007 最小矩形覆盖 凸包、旋转卡壳

    传送门 首先,肯定只有凸包上的点会限制这个矩形,所以建立凸包. 然后可以知道,矩形上一定有一条边与凸包上的边重合,否则可以转一下使得它重合,答案会更小. 于是沿着凸包枚举这一条边,通过旋转卡壳找到离这 ...