题意:

给了一个母串S, 每次循环给了一个模板串,问模板串在母 串中“匹配”了多少次?“匹配”的意思就是首字母和尾字母一样, 中间字母顺序可以换。

题解:

字符串hash.我们将询问字符串的首尾特殊hash,然后将询问串的长度存入到vector里面。

然后遍历一遍原串,将所有是询问串长度的子串的哈希值插入到vecor并排序,然后对于该询问,我们只要用lower_bound和upper_bound查找有多少哈希值等于我的就行了,记录答案,最后输出答案。

参考代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define pb push_back
#define base 1000039
#define pii pair<int,int>
#define pil pair<int,ll>
#define mkp make_pair
#define RI register int
const int INF=0x3f3f3f3f;
const int maxn=1e5+;
const int maxm=2e4+;
int T,Q,ans[maxm];
char s1[maxn<<],s2[maxn];
ull p[],x[maxm],y[maxn];
vector<int> vec[maxn];
inline int idx(char ch){return ch-'a'+;}
inline void preHash()
{
p[]=;
for(RI i=;i<;++i)
p[i]=p[i-]*base;
}
inline void work()
{
for(RI i=;i<=Q;++i)
{
scanf("%s",s2+);
int len=strlen(s2+);
x[i]=idx(s2[])*p[]+idx(s2[len])*p[];
for(RI j=;j<=len-;++j) x[i]+=p[idx(s2[j])];
vec[len].pb(i);
}
}
inline void solve()
{
int len=strlen(s1+);
for(RI i=;i<=len;++i)
{
int siz=vec[i].size();
if(!siz) continue;
ull pre=; int cnt=;
for(RI j=;j<i;++j) pre=pre+p[idx(s1[j])];
for(RI j=i;j<=len;++j)
{
pre=pre+p[idx(s1[j])];
if(j!=i) pre-=p[idx(s1[j-i])];
ull res=pre-p[idx(s1[j])]-p[idx(s1[j-i+])]+(idx(s1[j-i+]))*p[]+(idx(s1[j]))*p[];
y[++cnt]=res;
}
sort(y+,y++cnt);
for(RI j=,siz=vec[i].size();j<siz;++j)
{
int dn=lower_bound(y+,y++cnt,x[vec[i][j]])-y;
int up=upper_bound(y+,y++cnt,x[vec[i][j]])-y;
ans[vec[i][j]]=up-dn;
}
}
}
int main()
{
preHash();
scanf("%d",&T);
while(T--)
{
for(RI i=;i<maxn;++i) vec[i].clear();
scanf("%s%d",s1+,&Q);
work(); solve();
for(RI i=;i<=Q;++i) printf("%d\n",ans[i]);
}
return ; }

2019ICPC 上海网络赛 G题 Substring(哈希)的更多相关文章

  1. 2019ICPC南京网络赛A题 The beautiful values of the palace(三维偏序)

    2019ICPC南京网络赛A题 The beautiful values of the palace https://nanti.jisuanke.com/t/41298 Here is a squa ...

  2. 2018 ACM-ICPC徐州站网络赛 G题

    There's a beach in the first quadrant. And from time to time, there are sea waves. A wave ( xxx , yy ...

  3. 2019ICPC上海网络赛 A Lightning Routing I 点分树(动态点分治)+线段树

    题意 给一颗带边权的树,有两种操作 \(C~e_i~w_i\),将第\(e_i\)条边的边权改为\(w_i\). \(Q~v_i\),询问距\(v_i\)点最远的点的距离. 分析 官方题解做法:动态维 ...

  4. 2015北京网络赛 G题 Boxes bfs

    Boxes Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://hihocoder.com/contest/acmicpc2015beijingonl ...

  5. Peekaboo(2019年上海网络赛K题+圆上整点)

    目录 题目链接 题意 思路 代码 题目链接 传送门 题意 你的位置在\(O(0,0)\),\(A\)的位置为\((x_1,y_1)\),\(B\)的位置为\((x_2,y_2)\),现在已知\(a=O ...

  6. 2019上海网络赛B题(差分 + 离散化 or 差分 + 思维)

    这题.....队里都没怎么训练差分,导致败北...写了一堆线段树嘤嘤嘤,到最后也是超时,比赛结束后看到了差分的思想于是就去学了一手. 其实了解差分思想的一眼就能看出来是差分了.但是如果对n差分的话很明 ...

  7. 2013 acm 长沙网络赛 G题 素数+枚举 Goldbach

    题目 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3856 先预处理求出两个素数的和与积,然后枚举n-prime和n/pr ...

  8. 2016 ACM-ICPC 青岛站网络赛G题 题解

    [参考博客][https://blog.csdn.net/Tawn0000/article/details/82255682] 题意: 将n个数按照每k个一组来合并,合并需要花费的cost是两个数的长 ...

  9. 2019 ICPC上海网络赛 A 题 Lightning Routing I (动态维护树的直径)

    题目: 给定一棵树, 带边权. 现在有2种操作: 1.修改第i条边的权值. 2.询问u到其他一个任意点的最大距离是多少. 题解: 树的直径可以通过两次 dfs() 的方法求得.换句话说,到任意点最远的 ...

随机推荐

  1. .NET后端知识汇总

    C#.net系列后端知识点汇总(也有些许数据库.svn等),他山之石. 1..net相关技术:XML.webservice.SOAP,其中webservice使用三大技术:XML.SOAP.WSDL. ...

  2. Angular 2的HTML5 pushState在ASP.NET Core上的解决思路

    Angular 2的HTML5 pushState在ASP.NET Core上的解决思路 正如Angular 2在Routing & Navigation中所提及的那样,Angular 2是推 ...

  3. webpack安装与核心概念

    安装webpack webpack核心概念:入口.输出.加载器.插件.模块.模式 一.安装webpack 1.安装webpack之前需要安装nodejs环境,在使用nodejs环境自带的包管理工具np ...

  4. Linux下安装和使用WPS,体验良好

    最近,我在ubuntu18.04.3下面使用LibreOffice,感觉良好. 正值政府机关在进行2019年度正版软件使用情况整改,保护知识产权,我表示热烈欢迎并强烈支持. 通过摸底,因为以前采购的w ...

  5. ubuntu server 1604 设置笔记本盒盖 不操作

    sudo vim /etc/systemd/logind.conf   //打开配置文件 找到 #HandleLidSwitch=suspend  改为 HandleLidSwitch=ignore  ...

  6. windows 10 上使用pybind11进行C++和Python代码相互调用 | Interfacing C++ and Python with pybind11 on windows 10

    本文首发于个人博客https://kezunlin.me/post/8b9c051d/,欢迎阅读! Interfacing C++ and Python with pybind11 on window ...

  7. PostGIS 报错为org.postgresql.util.PSQLException:错误: Operation on mixed SRID geometries

    说明: 在用Openlayers与Geoserver进行开发,做在线编辑功能时,出现一个问题:每当我新增了一根要素后,再次用wfs的方式进行点击查询时,会报错mixed SRID. 通过研究发现在数据 ...

  8. SpringMvc demo示例及源码详细分析

    三层架构介绍 我们的开发架构一般都是基于两种形式,一种C/S架构,也就是客户端/服务器,另一种是B/S架构,也就是浏览器/服务器.在JavaEE开发中,几乎全部都是基于B/S架构的开发.那么在B/S架 ...

  9. odoo12 修行基础篇之 添加明细字段 (二)

    前一篇介绍了如何在视图和表单中添加字段.本节内容,我们讨论下如何在明细中加字段. 我想在销售页面明细中增加税额字段,这在表sale.order.line中已经存在,在此仅用来演示. odoo的明细一般 ...

  10. 【Luogu P1972】HH的项链

    Luogu P1972 一开始非常naive随便打了个树状数组统计就交上去了,然后不出意料的爆零了-- 然后删一删改一改过了. 重点:对于区间[1,r]中重复出现的数,我们只需要关心最右边那一个是否在 ...