hdu 4622 Reincarnation(hash)
初学字符串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)相关推荐
- 哈希(Hash)算法是一种单向密码体制(它是一个从明文到密文的不可逆的映射只有加密过程没有解密过程)
https://www.cnblogs.com/xiaojq/p/11109634.html 简单解释:哈希(Hash)算法,即散列函数.它是一种单向密码体制,即它是一个从明文到密文的不可逆的映射,只 ...
- Java集合—哈希(hash)表
原文作者: 原文地址: 1.哈希表的定义 这里先说一下哈希(hash)表的定义:哈希表是一种根据关键码去寻找值的数据映射结构,该结构通过把关键码映射的位置去寻找存放值的地方,说起来可能感觉有点复杂,我 ...
- HDU 5835 Danganronpa(弹丸论破)
HDU 5835 Danganronpa(弹丸论破) Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Ja ...
- redis的字典(Hash)
字典(Hash) Redis的字典是使用HashTable作为底层实现,一个哈希表存储多个键值对节点. 字典结构 typedef struct dict {//类型特定函数dictType *type ...
- HDU 5976 Detachment(拆分)
HDU 5976 Detachment(拆分) Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/ ...
- 解决哈希(hash)冲突的方法
解决哈希(hash)冲突的方法 当关键字值域远大于哈希表的长度,而且事先并不知道关键字的具体取值时.冲突就难免会发生.另外,当关键字的实际取值大于哈希表的长度时,而且表中已装满了记录,如果插入一个新记 ...
- 区块链——哈希(hash)
1.什么叫哈希(hash) 散列函数(或散列算法,又称哈希函数,英语:Hash Function)是一种从任何一种数据中创建小的数字"指纹"的方法.散列函数把消息或数据压缩成摘要, ...
- 技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-5.用户登录,密码的bcrypt(hash)加密与验证
技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-5.用户登录,密码的bcrypt(hash)加密与验证 技能学习:学习使用php(tp6框架) + vue.js,开发前端全 ...
- 「Redis数据结构」哈希对象(Hash)
「Redis数据结构」哈希对象(Hash) 文章目录 「Redis数据结构」哈希对象(Hash) 一.概述 二.编码 ZipList HashTable 三.编码转换 一.概述 Redis中hash对 ...
- hdu 4622 Reincarnation SAM模板题
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4622 题意:给定一个长度不超过2000的字符串,之后有Q次区间查询(Q <= 10000),问区 ...
最新文章
- No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android
- JAVA集合框架中的常用集合及其特点、适用场景、实现原理简介
- MySql连接——内连接、外连接(左连接、右连接、全连接)
- 探讨ASP.NET 2.0中的Web控件改进技术(2)
- PID算法搞不懂?看这篇文章就够了。
- POJ 2653 Pick-up sticks 判断线段相交
- 笔记本屏幕出现横条纹_笔记本支架+拓展坞+立式无线充:给你的桌面一个简单的品质升级...
- function click_click事件的累加问题解决
- JDK 11的一般可用性
- 面试官:不会看SQL执行计划,简历也敢写精通SQL优化?
- 【数字逻辑设计】核心知识归纳总结
- C++头文件,预处理详解
- 分子动力学aimd_研究人员在沸石分子筛活性调控研究方面取得新进展
- node.js中ws模块创建服务端和客户端,网页WebSocket客户端
- Centos7 安装 Kubernetes dashboard (安装篇)
- Linux下安装whl文件
- 用两个栈实现一个队列
- linux bios格式化磁盘,BIOS设置与磁盘分区、格式化.doc
- 简单的三点式腰背肌锻炼方法
- 那些在《JavaEE开发的颠覆者 Spring Boot实战》中遇到的坑,,。(一)
热门文章
- convex hull
- 2020-08-31第一次机器人课
- 0x000000c5(0X000000C5蓝屏是什么意思)
- 【PTA】 学生成绩录入及查询
- php手机地图导航,PHP引用百度地图API制作一个地图导航
- 基于C++的BNN推理
- UVA 12307 Smallest Enclosing Rectangle(旋转卡壳)
- Flutter 启动页 消除白屏
- vue中好用的视频插件推荐,video+canvas实现视频截图第一帧,ffmpeg实现视频截图第一帧
- python游戏开发keydown_pygame.KEYDOWN移动对象