牛客网-白兔的字符串(字符串哈希)
解题思路:
好像使用map会超时,所以采用链式哈希。
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn = 2000005;
const long long base = 97;
const int mod = 196613;char T[maxn];
unsigned long long Hash[maxn];
unsigned long long has[maxn];
int head[maxn], tot;struct node{unsigned long long x;int nxt;
}edges[maxn];void addEdge(unsigned long long x)
{
// cout << "gg"<< x<<endl;int u = x%mod;edges[tot] = {x,head[u]};head[u] = tot++;
}char str[maxn];int Find(unsigned long long x)
{
// cout <<"kk"<<x<<endl;int u = x%mod;for(int i = head[u]; ~i; i = edges[i].nxt){if(edges[i].x == x)return 1;}return 0;
}int main()
{scanf("%s", T+1);Hash[0] = 1;for(int i = 1; i < maxn; i++)Hash[i] = Hash[i-1]*base;int len = strlen(T+1);for(int i = 1; i <= len; i++)T[i+len] = T[i];memset(head,-1,sizeof(head));tot = 1;for(int i = 1; i <= 2*len; i++){has[i] = has[i-1]*base+(T[i]-'a'+1);
// cout << "1 "<<i<<" "<<has[i]<<endl;if(i>=len) addEdge(has[i]-has[i-len]*Hash[len]);}int t;scanf("%d", &t);while(t--){scanf("%s", str+1);int l = strlen(str+1);int ans = 0;for(int i = 1; i <= l; i++){has[i] = has[i-1]*base+(str[i]-'a'+1);
// cout <<"2 "<<i<<" "<<has[i]<<endl;if(i>=len) ans+=Find(has[i]-has[i-len]*Hash[len]);}printf("%d\n", ans);}return 0;
}
牛客网-白兔的字符串(字符串哈希)相关推荐
- 牛客网小白月赛6D 字符串丝带
链接:https://www.nowcoder.com/acm/contest/136/D 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 65536K,其他语言1310 ...
- 牛客网华为机试题 字符串问题 记录
一.题目描述 写出一个程序,接受一个由字母.数字和空格组成的字符串,和一个字母,然后输出输入字符串中该字母的出现次数.不区分大小写. 输入描述: 第一行输入一个由字母和数字以及空格组成的字符串,第二行 ...
- 牛客网在线编程之“字符串分割”
•连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组: •长度不是8整数倍的字符串请在后面补数字0,空字符串不处理. 以下代码均根据个人逻辑独立实现,空间或效率未必最优,欢迎批评指正. ...
- 牛客网之黑暗的字符串
题目链接:黑暗的字符串 分析:不管前面是什么序列,你在第n位至少有两种填法,第n-1,n-2的字母,当第n-1,n-2字母相同时,前面就漏掉了一种填法,即加上一个f(n-2)即可 确定dp数组以及下标 ...
- 牛客网 - 骆驼拼写法(字符串处理)
题目链接:https://ac.nowcoder.com/acm/contest/547/A 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64b ...
- 【牛客网题目】Java字符串专项
目录 写在前面 知识回顾 题目重现 题目1 题目2 题目3 题目4 题目5 题目6 题目答案 题目1解析 题目2解析 题目3解析 题目4解析 题目5解析 题目6解析 写在后面 写在前面 通过专项练习, ...
- C++初阶习题(牛客网)【5】求字符串最后一个单词的长度
题目描述: 牛客网题目链接 HJ1 字符串最后一个单词的长度 描述: 计算字符串最后一个单词的长度,单词以空格隔开,字符串长度小于5000.(注:字符串末尾不以空格为结尾) 输入描述: 输入一行,代表 ...
- 牛客网暑期ACM多校训练营(第三场) E Sort String 哈希处理字符串(模板)
链接:https://www.nowcoder.com/acm/contest/141/E 来源:牛客网 Eddy likes to play with string which is a seque ...
- 牛客网–华为机试在线训练4:字符串分隔
牛客网–华为机试在线训练4:字符串分隔 题目描述 •连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组: •长度不是8整数倍的字符串请在后面补数字0,空字符串不处理. 输入描述: 连续输 ...
- 牛客网--华为机试在线训练1:字符串最后一个单词的长度
牛客网–华为机试在线训练1:字符串最后一个单词的长度 题目地址: https://www.nowcoder.com/practice/8c949ea5f36f422594b306a2300315da? ...
最新文章
- jvm系列(四):jvm调优-命令大全(jps jstat jmap jhat jstack jinfo)
- Jquery中获取表单提交时不确认个数元素的个数与值的方法
- 【渝粤题库】广东开放大学 文化市场营销 形成性考核 (2)
- 答题闯关php,成语答题闯关红包流量主小程序源码
- 【OpenCV 例程200篇】60. 非线性滤波—联合双边滤波
- 在使用 Go 两年之后,我又转回 PHP 了
- android+eclipse工程,#Cocos2d+lua#android+Eclipse工程编译设置
- jquery判断是否隐藏
- win10使用navicat管理数据库
- C#泛型中的抗变和协变
- 服务器故障内存位置怎么确定,服务器故障内存位置怎么确定
- ArcCatalog 连接远程SDE 连接字符
- matlab线性规划的最优化,【OR】Matlab求解最优化问题(1) 线性规划
- OSChina 周日乱弹——如何请假不被老板骂
- 企业物流管理系统使用教程
- 英文日期格式及缩写总结
- 2021-11-11
- 零数科技创始人林乐博士荣登“长三角G60科创走廊创业榜单—星耀G60”
- 西门子培训2——OID
- Java 流中关于ObjectInputStream 和ObjectOutputStream 的陷进