热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Codeforces114DPetr#Hash

题目链接给了一个母串s1和两个串s2s3询问s1中有多少个以s2开头s3结尾的子串子串中s2s3可以重叠没啥好说的,直接哈希,先预处理以s2开头的下标和

题目链接
给了一个母串s1 和两个串s2 s3
询问s1中有多少个以s2开头s3结尾的子串 子串中s2 s3可以重叠
没啥好说的,直接哈希,先预处理以s2开头的下标和以s3结尾的下标
(string是真的方便)
然后遍历一次s1,如果当前下标满足了s2,就一直遍历下去寻找合法s3
注意形成的子串长度应当大于等于max(s2,s3) 直接存入哈希值最后去重就好了 ,最麻烦的就是哈希冲突 QAQ

在这里插入图片描述
最后没要模数 直接long long自然溢出就过了
当然我相信还有其他解法

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ll long long
#define int long long
#define inf 0x3f3f3f3f
#define mods 1000000007
#define modd 998244353
#define PI acos(-1)
#define fi first
#define se second
#define lowbit(x) (x&(-x))
#define mp make_pair
#define pb push_back
#define si size()
#define E exp(1.0)
#define fixed cout.setf(ios::fixed)
#define fixeds(x) setprecision(x)
#define IOS ios::sync_with_stdio(false);cin.tie(0)using namespace std;ll gcd(ll a,ll b){if(a<0)a&#61;-a;if(b<0)b&#61;-b;return b&#61;&#61;0?a:gcd(b,a%b);}
template<typename T>void read(T &res){bool flag&#61;false;char ch;while(!isdigit(ch&#61;getchar()))(ch&#61;&#61;&#39;-&#39;)&&(flag&#61;true);
for(res&#61;ch-48;isdigit(ch&#61;getchar());res&#61;(res<<1)&#43;(res<<3)&#43;ch - 48);flag&&(res&#61;-res);}
ll lcm(ll a,ll b){return a*b/gcd(a,b);}
ll qp(ll a,ll b,ll mod){ll ans&#61;1;if(b&#61;&#61;0){return ans%mod;}while(b){if(b%2&#61;&#61;1){b--;ans&#61;ans*a%mod;}a&#61;a*a%mod;b&#61;b/2;}return ans%mod;}//快速幂%
ll qpn(ll a,ll b, ll p){ll ans &#61; 1;a%&#61;p;while(b){if(b&1){ans &#61; (ans*a)%p;--b;}a &#61;(a*a)%p;b >>&#61; 1;}return ans%p;}//逆元 (分子*qp(分母,mod-2,mod))%mod;
string s1,s2,s3;
ll dis;
ll len1,len2,len3;
ll vis[3][100003];
vector<ll>ans;
signed main(){
cin>>s1>>s2>>s3;
len1&#61;s1.size();
len2&#61;s2.size();
len3&#61;s3.size();
dis&#61;max(len2,len3);
for(int i&#61;0;i<len1;i&#43;&#43;){
if(s1.substr(i,len2)&#61;&#61;s2){vis[1][i]&#61;1;
}if(s1.substr(i,len3)&#61;&#61;s3){vis[2][i&#43;len3-1]&#61;1;
}}
for(int i&#61;0;i<len1;i&#43;&#43;){if(vis[1][i]){ll ve&#61;0;for(int j&#61;i;j<len1;j&#43;&#43;){ve&#61;(ve*133&#43;(s1[j]-&#39;a&#39;&#43;1));if(vis[2][j]&#61;&#61;1&&j-i&#43;1>&#61;dis){ans.pb(ve);}}}}
sort(ans.begin(),ans.end());
ans.resize(unique(ans.begin(), ans.end())-ans.begin());
printf("%d",ans.size());}


推荐阅读
  • 本文由编程笔记#小编整理,主要介绍了关于数论相关的知识,包括数论的算法和百度百科的链接。文章还介绍了欧几里得算法、辗转相除法、gcd、lcm和扩展欧几里得算法的使用方法。此外,文章还提到了数论在求解不定方程、模线性方程和乘法逆元方面的应用。摘要长度:184字。 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • 电话号码的字母组合解题思路和代码示例
    本文介绍了力扣题目《电话号码的字母组合》的解题思路和代码示例。通过使用哈希表和递归求解的方法,可以将给定的电话号码转换为对应的字母组合。详细的解题思路和代码示例可以帮助读者更好地理解和实现该题目。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • 李逍遥寻找仙药的迷阵之旅
    本文讲述了少年李逍遥为了救治婶婶的病情,前往仙灵岛寻找仙药的故事。他需要穿越一个由M×N个方格组成的迷阵,有些方格内有怪物,有些方格是安全的。李逍遥需要避开有怪物的方格,并经过最少的方格,找到仙药。在寻找的过程中,他还会遇到神秘人物。本文提供了一个迷阵样例及李逍遥找到仙药的路线。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
author-avatar
张琪健V
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有