解题思路:

好像使用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;
}

牛客网-白兔的字符串(字符串哈希)相关推荐

  1. 牛客网小白月赛6D 字符串丝带

    链接:https://www.nowcoder.com/acm/contest/136/D 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 65536K,其他语言1310 ...

  2. 牛客网华为机试题 字符串问题 记录

    一.题目描述 写出一个程序,接受一个由字母.数字和空格组成的字符串,和一个字母,然后输出输入字符串中该字母的出现次数.不区分大小写. 输入描述: 第一行输入一个由字母和数字以及空格组成的字符串,第二行 ...

  3. 牛客网在线编程之“字符串分割”

    •连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组:  •长度不是8整数倍的字符串请在后面补数字0,空字符串不处理. 以下代码均根据个人逻辑独立实现,空间或效率未必最优,欢迎批评指正. ...

  4. 牛客网之黑暗的字符串

    题目链接:黑暗的字符串 分析:不管前面是什么序列,你在第n位至少有两种填法,第n-1,n-2的字母,当第n-1,n-2字母相同时,前面就漏掉了一种填法,即加上一个f(n-2)即可 确定dp数组以及下标 ...

  5. 牛客网 - 骆驼拼写法(字符串处理)

    题目链接:https://ac.nowcoder.com/acm/contest/547/A 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64b ...

  6. 【牛客网题目】Java字符串专项

    目录 写在前面 知识回顾 题目重现 题目1 题目2 题目3 题目4 题目5 题目6 题目答案 题目1解析 题目2解析 题目3解析 题目4解析 题目5解析 题目6解析 写在后面 写在前面 通过专项练习, ...

  7. C++初阶习题(牛客网)【5】求字符串最后一个单词的长度

    题目描述: 牛客网题目链接 HJ1 字符串最后一个单词的长度 描述: 计算字符串最后一个单词的长度,单词以空格隔开,字符串长度小于5000.(注:字符串末尾不以空格为结尾) 输入描述: 输入一行,代表 ...

  8. 牛客网暑期ACM多校训练营(第三场) E Sort String 哈希处理字符串(模板)

    链接:https://www.nowcoder.com/acm/contest/141/E 来源:牛客网 Eddy likes to play with string which is a seque ...

  9. 牛客网–华为机试在线训练4:字符串分隔

    牛客网–华为机试在线训练4:字符串分隔 题目描述 •连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组: •长度不是8整数倍的字符串请在后面补数字0,空字符串不处理. 输入描述: 连续输 ...

  10. 牛客网--华为机试在线训练1:字符串最后一个单词的长度

    牛客网–华为机试在线训练1:字符串最后一个单词的长度 题目地址: https://www.nowcoder.com/practice/8c949ea5f36f422594b306a2300315da? ...

最新文章

  1. jvm系列(四):jvm调优-命令大全(jps jstat jmap jhat jstack jinfo)
  2. Jquery中获取表单提交时不确认个数元素的个数与值的方法
  3. 【渝粤题库】广东开放大学 文化市场营销 形成性考核 (2)
  4. 答题闯关php,成语答题闯关红包流量主小程序源码
  5. 【OpenCV 例程200篇】60. 非线性滤波—联合双边滤波
  6. 在使用 Go 两年之后,我又转回 PHP 了
  7. android+eclipse工程,#Cocos2d+lua#android+Eclipse工程编译设置
  8. jquery判断是否隐藏
  9. win10使用navicat管理数据库
  10. C#泛型中的抗变和协变
  11. 服务器故障内存位置怎么确定,服务器故障内存位置怎么确定
  12. ArcCatalog 连接远程SDE 连接字符
  13. matlab线性规划的最优化,【OR】Matlab求解最优化问题(1) 线性规划
  14. OSChina 周日乱弹——如何请假不被老板骂
  15. 企业物流管理系统使用教程
  16. 英文日期格式及缩写总结
  17. 2021-11-11
  18. 零数科技创始人林乐博士荣登“长三角G60科创走廊创业榜单—星耀G60”
  19. 西门子培训2——OID
  20. Java 流中关于ObjectInputStream 和ObjectOutputStream 的陷进

热门文章

  1. Centos服务器ssh登录设置密钥对登录
  2. 苹果手机数据线充不了电_自动洗地机充不了电,洗地机厂家
  3. 第七章:实现、测试。黑盒测试、白盒测试、单元测试、集成测试
  4. 软件测试之TCP、UPD协议详解
  5. 1585 Amount of Degrees
  6. ArduinoUNO实战-第二十二章-红外遥控实验
  7. 双系统之删除Linux
  8. 人工智能在医疗领域的应用
  9. 因严重 OpenSSL 漏洞,Fedora 37 推迟至 11 月中旬发布
  10. 电容器充放电的原理是什么?