先预处理一个hash[a][b]:开头字符为a, 结尾字符是b,中间的字符hash值为hs的的hash表,保存的是出现次数

对于一个子串求hash值的策略:设hash值是个26位的数,每新增一个字符,就在对应位上+1

#include<bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/hash_policy.hpp>
using namespace __gnu_pbds;
using namespace std; typedef long long ll;
const int MAXN = ;
const int base = ;
const ll mod = 1e9 + ; int add(int a, int b){
return a + b >= mod ? a + b - mod : a + b;
} int sub(int a, int b){
return a - b < ? a - b + mod : a - b;
} int mul(ll a, int b){
return a * b >= mod ? a * b % mod : a * b;
} int qpow(int a, int b){
int ans = ;
for(; b; b >>= ){
if(b & ) ans = mul(ans, a);
a = mul(a, a);
}
return ans;
} gp_hash_table<int, int> mp[][];
int n, m, cnt[MAXN];
char s[MAXN], t[MAXN]; struct Node{
int hs;
int len, st, ed;
}nd[MAXN]; int main(){
int T, q;
scanf("%d", &T);
while(T --){
for(int i = ; i < ; i ++) for(int j = ; j < ; j ++)
mp[i][j].clear();
scanf("%s", s);
n = strlen(s);
scanf("%d", &q);
for(int i = ; i <= q; i ++){
scanf("%s", t);
m = strlen(t);
cnt[nd[i].len = m] ++;
nd[i].st = t[] - 'a';
nd[i].ed = t[m - ] - 'a';
int tmp = ;
for(int j = ; j < m - ; j ++)
tmp = add(tmp, qpow(base, t[j] - 'a'));
mp[nd[i].st][nd[i].ed][nd[i].hs = tmp] = ;
}
for(int i = ; i <= n; i ++) if(cnt[i]){
int tmp = ;
int st = s[] - 'a';
int ed = s[i - ] - 'a';
for(int j = ; j < i - ; j ++)
tmp = add(tmp, qpow(base, s[j] - 'a'));
if(mp[st][ed].find(tmp) != mp[st][ed].end())
mp[st][ed][tmp] ++;
for(int l = , r = i; r < n; l ++, r ++){
st = s[l] - 'a';
ed = s[r] - 'a';
tmp = sub(tmp, qpow(base, s[l] - 'a'));
tmp = add(tmp, qpow(base, s[r - ] - 'a'));
if(mp[st][ed].find(tmp) != mp[st][ed].end())
mp[st][ed][tmp] ++;
}
}
for(int i = ; i <= q; i ++){
cnt[nd[i].len] --;
printf("%d\n", mp[nd[i].st][nd[i].ed][nd[i].hs] - );
}
}
return ;
}

以字符集为位数的字符串hash——上海网络赛G的更多相关文章

  1. 2019ICPC 上海网络赛 G题 Substring(哈希)

    题意: 给了一个母串S, 每次循环给了一个模板串,问模板串在母 串中“匹配”了多少次?“匹配”的意思就是首字母和尾字母一样, 中间字母顺序可以换. 题解: 字符串hash.我们将询问字符串的首尾特殊h ...

  2. 2019上海网络赛 F. Rhyme scheme 普通dp

    Rhyme scheme Problem Describe A rhyme scheme is the pattern of rhymes at the end of each line of a p ...

  3. [2019上海网络赛F题]Rhyme scheme

    题目链接 题意,求出合法的长度为n的字典序第k小字符串,合法的定义为除了最后一位,每一位的取值范围为'A'到'A'+pos-1,而最后一位的取值范围'A'到当前字符串最大值+1. 队友tql,Orz ...

  4. 2019ICPC 上海网络赛 L. Digit sum(二维树状数组+区间求和)

    https://nanti.jisuanke.com/t/41422 题目大意: 给出n和b,求1到n,各数在b进制下各位数之和的总和. 直接暴力模拟,TLE.. 没想到是要打表...还是太菜了. # ...

  5. hdu 4027 2011上海赛区网络赛G 线段树 成段平方根 ***

    不能直接使用成段增减的那种,因为一段和的平方根不等于平方根的和,直接记录是否为1,是1就不需要更新了 #include<cstdio> #include<iostream> # ...

  6. HDU 5044(2014 ACM-ICPC上海网络赛)

    题意:给定一个树形图,节点10^5,有两种操作,一种是把某两点间路径(路径必定唯一)上所有点的权值增加一个固定值. 另一种也是相同操作,不同的是给边加权值.操作次数10^5.求操作过后,每个点和每条边 ...

  7. hdu 5476 Explore Track of Point(2015上海网络赛)

    题目链接:hdu 5476 今天和队友们搞出3道水题后就一直卡在这儿了,唉,真惨啊……看着被一名一名地挤出晋级名次,确实很不好受,这道恶心的几何题被我们3个搞了3.4个小时,我想到一半时发现样例输出是 ...

  8. 2015上海网络赛 A Puzzled Elena

    题意:给定一棵树,求这个节点的所有子树中包括他本身与它互质的节点的个数. 解题思路:题利用dfs序+容斥原理+前缀和性质解决.题目中要求每个结点,和多少个它的子结点互素.如果每次为了求一个点去跑一遍d ...

  9. 2014上海网络赛 HDU 5053 the Sum of Cube

    水 #include <stdio.h> #include <stdlib.h> #include<math.h> #include<iostream> ...

随机推荐

  1. Delphi 版本信息获取函数 GetFileVersionInfo、GetFileVersionInfoSize、VerFindFile、VerInstallFile和VerQueryValue

    一.版本信息获取函数简介和作用 获取文件版本信息的作用: 1. 避免在新版本的组件上安装旧版本的相同组件: 2. 在多语言系统环境中,操作系统根据文件版本信息里提供的语言信息在启动程序时决定使用的正确 ...

  2. SQL Server 2014 安装说明

    SQL Server 2014 安装说明 本节内容将说明如何通过安装向导在 Windows Server 2012 R2 上安装 SQL Server 2014. 先从 MSDN 网站上下载安装了 S ...

  3. Temporarily disable Ceph scrubbing to resolve high IO load

    https://blog.dachary.org/2014/08/02/temporarily-disable-ceph-scrubbing-to-resolve-high-io-load/ In a ...

  4. 「NOI2017」整数 解题报告

    「NOI2017」整数 有一些比较简单的\(\log^2n\)做法 比如暴力在动态开点线段树上维护每个位置为\(0\)还是\(1\),我们发现涉及到某一位加上\(1\)或者减去\(1\)实际上对其他位 ...

  5. vue-element-admin安装失败的问题

    根据官网的介绍,从GitHub下载以后,安装依赖的时候一直不成功,试了很多办法,最终解决 先记录错误的过程: 从GitHub下载 在当前文件夹的地址栏输入 “cmd” 打开窗口 输入 npm inst ...

  6. mapreduce求共同好友

    逻辑分析 以下是qq的好友列表数据,冒号前是一个用户,冒号后是该用户的所有好友(数据中的好友关系是单向的) A:B,C,D,F,E,O B:A,C,E,K C:F,A,D,I D:A,E,F,L E: ...

  7. BZOJ5484: [Usaco2018 Dec]Sort It Out

    5484: [Usaco2018 Dec]Sort It Out https://www.lydsy.com/JudgeOnline/problem.php?id=5484 Sol. 考虑没有在被喊叫 ...

  8. Excel表格文本格式的数字和数字格式如何批量转换

    Excel表格文本格式的数字和数字格式如何批量转换 在使用Excel表格对数据求和时,只能对单元格内常规格式的数据进行计算,而不能对单元格中的文本格式的数据进行计算,特点就是在单元格的左上角有一个绿色 ...

  9. gradle打成jar包报错 "错误: 找不到或无法加载主类 App"(已经配置过主类)

    文章目录 将gradle打成jar包(包括依赖) 运行jar包 报错 原因(src自己手动创建的) 解决(添加src目录) 将gradle打成jar包(包括依赖) jar { manifest { a ...

  10. 引入iframe, 头部跳转并点亮效果

    <script> /** * @Author: zhangcs * @Date: 2018-09-20 * @cnblogs: https://www.cnblogs.com/zhangc ...