白兔的字符串

链接:

文章目录

    • 题目描述
    • 题解:
    • 代码:

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述

白兔有一个字符串T。白云有若干个字符串S1,S2…Sn。

白兔想知道,对于白云的每一个字符串,它有多少个子串是和T循环同构的。

提示:对于一个字符串a,每次把a的第一个字符移动到最后一个,如果操作若干次后能够得到字符串b,则a和b循环同构。

所有字符都是小写英文字母

输入描述:
第一行一个字符串T(|T|<=10^6)
第二行一个正整数n (n<=1000)
接下来n行为S1~Sn (|S1|+|S2|+…+|Sn|<=10 ^ 7),max(|S1|,|S2|,|S3|,|S4|,…|Sn|)<=10 ^ 6
输出描述:
输出n行表示每个串的答案
示例1
输入

abab
2
abababab
ababcbaba

输出

5
2

题解:

hash题
好久没打都忘得差不多了
讲哈希的博客
根据题意,我们可以得知,要寻找与T是循环同构的子串
那T也就相当于是环,我们拆环为链,长度加倍,
然后将二倍的T中每一部分取哈希,每一部分的长度就是原T的长度
然后根据大小进行排序
输入子串a后,因为是在中取连续子串,所以本身就是一条链,我们按照T的长度对a的每一部分取hash然后比较是否相等
比较大小的方法可以用二分查找,因为我们之前已经对大小进行排序了;也可以模拟map,直接用map会超时

代码:

因为我的代码写太乱了,找了大佬条理清晰的代码。
并加上详细注释(应该很详细了

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int maxn = 1e6 + 5;
ull hs[maxn];
ull base[maxn]; 
char T[maxn<<1],s[maxn];
int n;
vector<ull> v;
ull gethash(int i,int j){//获得子串的hash return hs[j]-hs[i-1]*base[j-i+1];
}
//查找
bool judge(int i,int j){ull x=gethash(i,j);//获得子串的hash int id=lower_bound(v.begin(),v.end(),x)-v.begin();//二分查找 if(id==v.size())return false;//如果没找到 else return v[id]==x;//判断是否找到 
}
int main(){base[0]=1;for(int i=1;i<maxn;i++)base[i]=base[i-1]*131;cin>>(T+1);ll len=strlen(T+1);for(int i=1;i<=len;i++)T[i+len]=T[i];//拆环为链,长度加倍 for(int i=1;i<=2*len;i++)hs[i]=hs[i-1]*131+(T[i] - 'a' + 1);//对链进行hash for(int i=1;i<=len;i++)v.push_back(gethash(i,i+len-1));//获得子串的hash sort(v.begin(),v.end());//对哈希结果进行排序 ,方便后面的二分查找 cin>>n;while(n--){cin>>(s+1);ll lens=strlen(s+1);int cnt=0;for(int i=1;i<=lens;i++)hs[i]=hs[i-1]*131+(s[i] - 'a' + 1);//进行hash for(int i=1;i+len-1<=lens;i++)if(judge(i,i+len-1))cnt++;//判断子串是否与T循环同构 cout<<cnt<<endl;}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/320108.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

利用.NET Core类库System.Reflection.DispatchProxy实现简易Aop

Aop即是面向切面编程&#xff0c;众多Aop框架里Castle是最为人所知的&#xff0c;另外还有死去的Spring.NET&#xff0c;当然&#xff0c;.NET Core社区新秀AspectCore在性能与功能上都非常优秀&#xff0c;已经逐渐被社区推崇和有越来越多的人使用。感谢柠檬同学的礼物&#x…

P6348-[PA2011]Journeys【线段树优化建图,最短路】

正题 题目链接:https://www.luogu.com.cn/problem/P6348 题目大意 nnn个点的一张图&#xff0c;mmm条边表示区间[a,b][a,b][a,b]向区间[c,d][c,d][c,d]连边&#xff0c;求单源最短路。 解题思路 线段树优化建图的裸题&#xff0c;但是不能直接让线段树上的点两两建边&#xf…

[XSY] 简单的博弈题(博弈+dp+组合数+容斥)

简单的博弈题 对于贪心的对手&#xff0c;显然用最大的一半和他最小的一半比较判断是否全胜。&#xff08;这不就是田忌赛马吗&#xff09; 对于随机的对手&#xff0c;先考虑暴力怎么做&#xff1a; void check(int x,int w){if(x>m){res(w>m/21);return;}for(int i1;…

【矩阵乘法】沼泽鳄鱼(ssl 2511)

沼泽鳄鱼 ssl 2511 题目大意 给你一个无向图&#xff0c;有一些鳄鱼有周期性地在这个图中走&#xff08;鳄鱼不用沿着边走&#xff0c;周期为2或3或4&#xff09;&#xff0c;问你从初始点走到最终点走k个单位时间&#xff0c;不在点和边上停下&#xff0c;不在同一时间和鳄…

Matrix(二维hash)

题目链接 文章目录题目描述题意&#xff1a;题解代码&#xff1a;时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 32768K&#xff0c;其他语言65536K 64bit IO Format: %lld题目描述 给定一个M行N列的01矩阵&#xff08;只包含数字0或1的矩阵&am…

当我们谈高性能时,我们谈些什么?(送书活动)

网站越快&#xff0c;用户的黏性就越高&#xff1b;网站越快&#xff0c;用户忠诚度更高&#xff1b;网站越快&#xff0c;用户转化率越高。简言之&#xff0c;速度是关键。——《Web 性能权威指南》显然&#xff0c;高性能意味着“快”。但对快的定义&#xff0c;在不同的系统…

P5355-[Ynoi2017]由乃的玉米田【莫队,bitset,根号分治】

正题 题目链接:https://www.luogu.com.cn/problem/P5355 顺带一提的是P3674 小清新人渣的本愿是这题的弱化版&#xff0c;提交就可以A 题目大意 nnn个数字&#xff0c;询问 一个区间是否有两个数a,ba,ba,b使得abxabxabx一个区间是否有两个数a,ba,ba,b使得a−bxa-bxa−bx一个区…

[XSY] 字符串题(字符串,构造)

字符串题 考虑找到一种方法&#xff0c;能够对一个 lyndon 串 A &#xff0c;直接求出 A 的下一个 lyndon 串。考虑不断复制 A &#xff0c;得 AAA…A因为 lyndon 串是自身循环移位得到的串中字典序严格最小的&#xff0c;所以 AAA…A 非lyndon 串。考虑微调&#xff1a;将 AA…

【DP】划分数列(ybtoj DP-2-1)

划分数列 ybtoj DP-2-1 题目大意 给你一个数列&#xff0c;让你划分出最少的段数&#xff0c;使每段要么单调不降&#xff0c;要么单调不增 输入样例#1 6 1 2 3 2 2 1 输出样例#1 2 输入样例#2 9 1 2 1 2 1 2 1 2 1 输出样例#2 5 输入样例#3 7 1 2 3 2 1 99999999…

Asp.net Core 2.1新功能Generic Host(通用主机)深度学习

什么是Generic Host ?这是在Asp.Net Core 2.1加入了一种新的Host&#xff0c;现在2.1版本的Asp.Net Core中&#xff0c;有了两种可用的Host。Web Host –适用于托管Web程序的Host,就是我们所熟悉的在Asp.Net Core应用程序的Mai函数中用CreateWebHostBuilder创建出来的常用的We…

牛客网【每日一题】5月19日题目精讲 比赛

链接&#xff1a; 文章目录题目描述题意题解&#xff1a;代码时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 131072K&#xff0c;其他语言262144K 64bit IO Format: %lld题目描述 你在打比赛&#xff0c;这场比赛总共有12个题 对于第i个题&…

P3704-[SDOI2017]数字表格【莫比乌斯反演】

正题 题目链接:https://www.luogu.com.cn/problem/P3704 题目大意 TTT组询问&#xff0c;给出n,mn,mn,m求∏i1n∏j1mFbigcd(i,j)\prod_{i1}^n\prod_{j1}^mFbi_{gcd(i,j)}i1∏n​j1∏m​Fbigcd(i,j)​ 其中FbixFbi_xFbix​表示第xxx项斐波那契数列。 解题思路 答案就是∏x1nFb…

【贪心】奶牛晒衣服(ybtoj 贪心-1-1)

奶牛晒衣服 ybtoj 贪心-1-1 题目大意 有n件衣服&#xff0c;每件衣服有一个湿度&#xff0c;每一个单位时间所有衣服会湿度-a&#xff0c;同时可以选择一件衣服使其湿度-b&#xff0c;问最短在多久可以使所有衣服湿度小于等于0 输入样例 3 2 1 1 2 3输出样例 1数据范围 1…

[XSY] 树与图(树形DP、生成函数、分治NTT、重链剖分)

树与图 如果真的在图上跑算法&#xff0c;那么光建图复杂度就O(n2logn)O(n^2logn)O(n2logn)了&#xff0c;这显然不可行。所以一定要把 在图上的操作 转换成 在树上的操作 在图上删去点u&#xff0c;相当于在树上删去u到根节点的链&#xff0c;并把u的整棵子树删掉 如果我们枚举…

520 钻石争霸赛 题解

说好的钻石难度&#xff0c;结果本人菜的一地。。只有88分。。。。 文章目录7-1 考试周7-2 真的恭喜你7-3 平均成绩7-4 古风AB难度开始上升7-5 猜近似数字7-6 随机输一次7-7 阶乘的非零尾数7-8 三足鼎立前四题十分钟AC后两题二十分钟自闭第五题玄学卡点不知为何7-1 考试周 模拟…

.NET Core 跨平台物联网框架 ServerSuperIO.Core,一套设备驱动通吃嵌入式、上位机、云服务...

一、概述我们的大数据平台&#xff08;云&#xff09;平台的数据接收服务基于ServerSuperIO开发&#xff0c;因为集成的功能比较多&#xff0c;无法实现跨平台&#xff0c;现在跑在Windows下。但是云端体系化、标准化建设&#xff0c;跨平台是必走的技术路线。在ServerSuperIO基…

P3243-[HNOI2015]菜肴制作【拓扑排序,优先队列】

正题 题目链接:https://www.luogu.com.cn/problem/P3243 题目大意 nnn个数&#xff0c;有mmm个要求形如xxx在yyy的前面&#xff0c;现在要求在i−1i-1i−1尽量靠前的情况下iii尽量靠前(i>1)(i>1)(i>1) 求这个序列 解题思路 这个很显然要求是张有向图无环图&#xff…

【贪心】雷达装置(ybtoj 贪心-1-2)

雷达装置 ybtoj 贪心-1-2 题目大意 在平面直角坐标系中有n个点&#xff0c;现在让你在x轴上布置雷达&#xff0c;雷达可以的侦查半径为d&#xff0c;问你最少布置多少个雷达 输入样例 3 2 1 2 -3 1 2 1输出样例 2数据范围 1⩽n⩽1031\leqslant n \leqslant 10^31⩽n⩽103…

[XSY] 传统游戏(DP、容斥)

传统游戏 看到题&#xff0c;第一想法是设dp[k][s]dp[k][s]dp[k][s]表示选了kkk个数&#xff0c;当前异或和为sss的方案数&#xff0c;但这样产生一个问题&#xff1a;要如何保证所选的数不重复且无序呢&#xff1f;一种方法是修改状态&#xff1a;我们增设一维iii&#xff0c…

asp.net core添加全局异常处理及log4net、Nlog应用

一、介绍此篇文章将会介绍项目的全局异常收集以及采用log4net或者NLog记录。众所周知&#xff0c;一旦自己的项目报错&#xff0c;如果没有进行处理都是显示不友好的&#xff0c;有得甚至直接爆出错误页面&#xff0c;看的也是很奇怪。为了避免出现这样的错误以及在错误出现的时…