当前位置:网站首页>841. String hash
841. String hash
2022-07-07 19:55:00 【Hunter_ Kevin】
Given a length of n String , Re given m A asked , Each query contains four integers l1,r1,l2,r2, Please judge [l1,r1] and [l2,r2] Whether the strings and substrings contained in these two intervals are exactly the same .
The string contains only uppercase and lowercase English letters and numbers .
Input format
The first line contains integers n and m, Represents the length of the string and the number of queries .
The second line contains a length of n String , The string contains only uppercase and lowercase English letters and numbers .
Next m That's ok , Each line contains four integers l1,r1,l2,r2, Indicates the two intervals involved in a query .
Be careful , The position of the string is from 1 Numbered starting .
Output format
Output a result for each query , If two string substrings are identical, output Yes, Otherwise output No.
Each result takes up one line .
Data range
1≤n,m≤105
sample input :
8 3
aabbaabb
1 3 5 7
1 3 6 8
1 2 1 2
sample output :
Yes
No
Yes
Ideas :
①、 String subscript from 1 Start
②、 First , The given string , Press the subscript to find from left to right i Is the last string , Find its character based ascii code , be based on P Hexadecimal accumulated string hash value
③、 Based on empirical values , A string of hash value , With 264 Data size for storage , With 131 perhaps 13331 When it is a decimal number , Cumulative hash It's worth it 264 modulus , The probability of conflict is very small , Think ignore
④、unsigned long long just 264, use ull For storage , If the data overflows , That is, high-order truncation , Keep it low , It's equivalent to automatic Yes 264 modulus
⑤、 The key point of the algorithm is the prefix of string hash Value preprocessing and p^i Array preprocessing
seekA string l~r
Corresponding hash value , It only needsh[r] - h[l-1] * p[(r-1) - (l-1-1)]
namelyh[r] - h[l-1] * p[r-l+1]
Example :123456
seek 34 Of hash value
1234 - 12 * 10^2 == 34
#include <iostream>
#include <cstring>
using namespace std;
typedef unsigned long long ULL;
const int N = 100010, P = 131;
// Empirical value Use 131 perhaps 13331 Use 2^64 To store the size of the string hash value , Theoretically With 131 perhaps 13331 For the string of hexadecimal numbers hash value mod 2^64 The probability of conflict after that is very small , It can be seen that there is no conflict
ULL h[N], p[N];//h The array stores the string before the subscript hash value ,p The array stores the bit weight of the subscript position base
char s[N];
int main()
{
int n, m;
cin>> n >> m >> s+1;
// Find the string of hash Value preprocessing results and Subscript to be i The position of the corresponding p^i
p[0] = 1;
for(int i = 1; i <= n; i++)
{
p[i] = p[i-1] * P;// Find the subscript i need × Bit weight of p^0 p^1 p^2 p^3 1 1*p 1*p*p 1*p*p*p
h[i] = h[i-1] * P + s[i];// Find out i The position corresponds to hash value ,ULL After spilling , High truncation , Keep it low , It's equivalent to 2^64 modulus ,s[i] The actual value is the hash value of the character
}
int l1,r1,l2,r2;
while(m -- )
{
cin>>l1>>r1>>l2>>r2;
ULL x = h[r1] - h[l1-1] * p[r1-l1+1]; // Find a string hash value ,r1 Corresponding hash value - (l1-1) Corresponding hash value * p^(r1-l1+1) namely The difference between the two positions p^(r1-1 - (l1-1-1))
ULL y = h[r2] - h[l2-1] * p[r2-l2+1];
if(x == y)cout<<"Yes"<<endl; // If the hash values of two strings are equal , Then the strings are equal
else cout<<"No"<<endl;
}
return 0;
}
边栏推荐
- Chief technology officer of Pasqual: analog quantum computing takes the lead in bringing quantum advantages to industry
- Time tools
- R语言ggplot2可视化:使用ggpubr包的ggdensity函数可视化分组密度图、使用stat_overlay_normal_density函数为每个分组的密度图叠加正太分布曲线
- R语言使用ggplot2函数可视化需要构建泊松回归模型的计数目标变量的直方图分布并分析构建泊松回归模型的可行性
- 【STL】vector
- PMP对工作有益吗?怎么选择靠谱平台让备考更省心省力!!!
- tp6 实现佣金排行榜
- Redis——基本使用(key、String、List、Set 、Zset 、Hash、Geo、Bitmap、Hyperloglog、事务 )
- RESTAPI 版本控制策略【eolink 翻译】
- Kunpeng developer summit 2022 | Kirin Xin'an and Kunpeng jointly build a new ecosystem of computing industry
猜你喜欢
CMD command enters MySQL times service name or command error (fool teaching)
Make insurance more "safe"! Kirin Xin'an one cloud multi-core cloud desktop won the bid of China Life Insurance, helping the innovation and development of financial and insurance information technolog
openEuler 有奖捉虫活动,来参与一下?
Introduction to bit operation
The project manager's "eight interview questions" is equal to a meeting
Kirin Xin'an won the bid for the new generation dispatching project of State Grid!
2022.07.05
Research and practice of super-resolution technology in the field of real-time audio and video
Kirin Xin'an cloud platform is newly upgraded!
杰理之发起对耳配对、回连、开启可发现、可连接的轮循函数【篇】
随机推荐
what‘s the meaning of inference
微信公众号OAuth2.0授权登录并显示用户信息
Kunpeng developer summit 2022 | Kirin Xin'an and Kunpeng jointly build a new ecosystem of computing industry
RESTAPI 版本控制策略【eolink 翻译】
Kirin Xin'an joins Ningxia commercial cipher Association
怎么在手机上买股票开户 股票开户安全吗
2022.07.02
[Verilog advanced challenge of Niuke network question brushing series] ~ multi bit MUX synchronizer
PMP對工作有益嗎?怎麼選擇靠譜平臺讓備考更省心省力!!!
How to buy bank financial products? Do you need a bank card?
The DBSCAN function of FPC package of R language performs density clustering analysis on data, checks the clustering labels of all samples, and the table function calculates the two-dimensional contin
AD域组策略管理
爬虫实战(七):爬王者英雄图片
Download from MySQL official website: mysql8 for Linux X Version (Graphic explanation)
Ucloud is a basic cloud computing service provider
Navicat连接2002 - Can‘t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock‘解决
杰理之手动配对方式【篇】
Classification automatique des cellules de modules photovoltaïques par défaut dans les images de lecture électronique - notes de lecture de thèse
杰理之关于 TWS 声道配置【篇】
ASP. Net gymnasium integrated member management system source code, free sharing