初学字符串hash,直接拿的kuangbin大佬的模板,kuangbin大佬的模板还是比较好懂的。hash查重的方式竟然是建图来查的,蒟蒻表示很吃惊。
关于字符串hash的资料可以看:https://www.bilibili.com/video/av7230433/?from=search&seid=5820099295402129658
视频中的ppt:https://wenku.baidu.com/view/b7d3d1c6804d2b160a4ec090.html

#include <bits/stdc++.h>
using namespace std;
const int HASH = 10007;
const int MAXN = 2010;
struct HASHMAP
{int head[HASH],next[MAXN],size;unsigned long long state[MAXN];int f[MAXN];void init(){size = 0;memset(head,-1,sizeof(head));}int insert(unsigned long long val,int _id){int h = val%HASH;for(int i = head[h]; i != -1; i = next[i])if(val == state[i]){int tmp = f[i];f[i] = _id;return tmp;}f[size] = _id;state[size] = val;next[size] = head[h];head[h] = size++;return 0;}
} H;
const int SEED = 13331;
unsigned long long P[MAXN];
unsigned long long S[MAXN];
char str[MAXN];
int ans[MAXN][MAXN];
int main()
{P[0] = 1;for(int i = 1; i < MAXN; i++)P[i] = P[i-1] * SEED;int T;scanf("%d",&T);while(T--){scanf("%s",str);int n = strlen(str);S[0] = 0;for(int i = 1; i <= n; i++)S[i] = S[i-1]*SEED + str[i-1];memset(ans,0,sizeof(ans));for(int L = 1; L <= n; L++){H.init();for(int i = 1; i + L - 1 <= n; i++){//返回的是这个长度的串之前出现的位置,之前出现过,所以在那个位置到//当前这个位置这段区间的个数要减-1,同一个区间内同样的串只需要计算一次int l = H.insert(S[i+L-1] - S[i-1]*P[L],i);ans[i][i+L-1]++;ans[l][i+L-1]--;}}for(int i = n; i >= 0; i--)for(int j = i; j <= n; j++)ans[i][j] += ans[i+1][j] + ans[i][j-1] - ans[i+1][j-1];int m,u,v;scanf("%d",&m);while(m--){scanf("%d%d",&u,&v);printf("%d\n",ans[u][v]);}}return 0;
}

hdu 4622 Reincarnation(hash)相关推荐

  1. 哈希(Hash)算法是一种单向密码体制(它是一个从明文到密文的不可逆的映射只有加密过程没有解密过程)

    https://www.cnblogs.com/xiaojq/p/11109634.html 简单解释:哈希(Hash)算法,即散列函数.它是一种单向密码体制,即它是一个从明文到密文的不可逆的映射,只 ...

  2. Java集合—哈希(hash)表

    原文作者: 原文地址: 1.哈希表的定义 这里先说一下哈希(hash)表的定义:哈希表是一种根据关键码去寻找值的数据映射结构,该结构通过把关键码映射的位置去寻找存放值的地方,说起来可能感觉有点复杂,我 ...

  3. HDU 5835 Danganronpa(弹丸论破)

    HDU 5835 Danganronpa(弹丸论破) Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Ja ...

  4. redis的字典(Hash)

    字典(Hash) Redis的字典是使用HashTable作为底层实现,一个哈希表存储多个键值对节点. 字典结构 typedef struct dict {//类型特定函数dictType *type ...

  5. HDU 5976 Detachment(拆分)

    HDU 5976 Detachment(拆分) Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/ ...

  6. 解决哈希(hash)冲突的方法

    解决哈希(hash)冲突的方法 当关键字值域远大于哈希表的长度,而且事先并不知道关键字的具体取值时.冲突就难免会发生.另外,当关键字的实际取值大于哈希表的长度时,而且表中已装满了记录,如果插入一个新记 ...

  7. 区块链——哈希(hash)

    1.什么叫哈希(hash) 散列函数(或散列算法,又称哈希函数,英语:Hash Function)是一种从任何一种数据中创建小的数字"指纹"的方法.散列函数把消息或数据压缩成摘要, ...

  8. 技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-5.用户登录,密码的bcrypt(hash)加密与验证

    技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-5.用户登录,密码的bcrypt(hash)加密与验证 技能学习:学习使用php(tp6框架) + vue.js,开发前端全 ...

  9. 「Redis数据结构」哈希对象(Hash)

    「Redis数据结构」哈希对象(Hash) 文章目录 「Redis数据结构」哈希对象(Hash) 一.概述 二.编码 ZipList HashTable 三.编码转换 一.概述 Redis中hash对 ...

  10. hdu 4622 Reincarnation SAM模板题

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4622 题意:给定一个长度不超过2000的字符串,之后有Q次区间查询(Q <= 10000),问区 ...

最新文章

  1. No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android
  2. JAVA集合框架中的常用集合及其特点、适用场景、实现原理简介
  3. MySql连接——内连接、外连接(左连接、右连接、全连接)
  4. 探讨ASP.NET 2.0中的Web控件改进技术(2)
  5. PID算法搞不懂?看这篇文章就够了。
  6. POJ 2653 Pick-up sticks 判断线段相交
  7. 笔记本屏幕出现横条纹_笔记本支架+拓展坞+立式无线充:给你的桌面一个简单的品质升级...
  8. function click_click事件的累加问题解决
  9. JDK 11的一般可用性
  10. 面试官:不会看SQL执行计划,简历也敢写精通SQL优化?
  11. 【数字逻辑设计】核心知识归纳总结
  12. C++头文件,预处理详解
  13. 分子动力学aimd_研究人员在沸石分子筛活性调控研究方面取得新进展
  14. node.js中ws模块创建服务端和客户端,网页WebSocket客户端
  15. Centos7 安装 Kubernetes dashboard (安装篇)
  16. Linux下安装whl文件
  17. 用两个栈实现一个队列
  18. linux bios格式化磁盘,BIOS设置与磁盘分区、格式化.doc
  19. 简单的三点式腰背肌锻炼方法
  20. 那些在《JavaEE开发的颠覆者 Spring Boot实战》中遇到的坑,,。(一)

热门文章

  1. convex hull
  2. 2020-08-31第一次机器人课
  3. 0x000000c5(0X000000C5蓝屏是什么意思)
  4. 【PTA】 学生成绩录入及查询
  5. php手机地图导航,PHP引用百度地图API制作一个地图导航
  6. 基于C++的BNN推理
  7. UVA 12307 Smallest Enclosing Rectangle(旋转卡壳)
  8. Flutter 启动页 消除白屏
  9. vue中好用的视频插件推荐,video+canvas实现视频截图第一帧,ffmpeg实现视频截图第一帧
  10. python游戏开发keydown_pygame.KEYDOWN移动对象