Birthday Cake

思路:找到每个串的公共前后缀,统计公共前后缀之间的字符串的hash值,并判断所给n个串中是否存在符合条件的串
eg:abbddab
对于该串,我们不难发现,公共前后缀是ab,公共前后缀之间的串是bdd,我们需要统计所有串中bdd出现的次数
注意,求得不是最长公共前后缀,而是所有的公共前后缀
细节问题:1、取模
2、RE可能是因为tmp定义为string,每次对tmp赋值的时候,tmp串会进行依次刷新,会造成堆栈溢出
#include<bits/stdc++.h>
#define ll long long
#define mp make_pair
using namespace std; const int N = 4e5 + 10;
const ll m1 = 1e9 + 7;
const ll m2 = 1e9 + 9;
const int mod1 = 233;
const int mod2 = 19;
string st[N];
char tmp[N];
ll n, ans;
ll num1[N], num2[N], hash1[N], hash2[N];
map<pair<ll,ll>, int> cnt; //每个串,只需要考虑长度小于等于该串的长度的串
bool cmp(string st1, string st2){
if(st1.size() < st2.size()) return true;
return false;
} void init(){
num1[0] = num2[0] = 1;
for(int i = 1; i < N - 1; i++){
num1[i] = num1[i - 1] * mod1 % m1;
num2[i] = num2[i - 1] * mod2 % m2;
}
} ll gethash1(int l, int r){
if(l > r) return 0;
return (hash1[r] - (hash1[l - 1] * num1[r - l + 1]) % m1 + m1)%m1;
} ll gethash2(int l, int r){
if(l > r) return 0;
return (hash2[r] - (hash2[l - 1] * num2[r - l + 1]) % m2 + m2) % m2;
} signed main(){
cin >> n;
for(int i = 1; i <= n; i++){
cin >> st[i];
}
init();
sort(st + 1, st + 1 + n, cmp);
for(int i = 1; i <= n; i++){
int len = st[i].size();
for(int j = 0; j < len; j++){
tmp[j + 1] = st[i][j];
}
for(int j = 1; j <= len; j++){
hash1[j] = (hash1[j - 1] * mod1 % m1 + (tmp[j] - 'a') + 122)%m1;
hash2[j] = (hash2[j - 1] * mod2 % m2 + (tmp[j] - 'a') + 122) % m2;
}
for(int j = 1; j <= len - j + 1; j++){
int t = len - j + 1;
if(gethash1(1,j) == gethash1(t,len) && gethash2(1,j) == gethash2(t, len)){
ans += cnt[mp(gethash1(j + 1, t - 1), gethash2(j + 1, t - 1))];
}
}
ans += cnt[mp(gethash1(1, len), gethash2(1, len))];
cnt[mp(gethash1(1, len), gethash2(1, len))]++;
}
cout << ans;
return 0;
}

双哈希_Birthday_Cake的更多相关文章

  1. Codeforces Round #578 (Div. 2) E. Compress Words (双哈希)

    题目:https://codeforc.es/contest/1200/problem/E 题意:给你n个单词,你需要把他合成成一个句子,相邻的两个单词,相邻部分相同的话可以把其中一个的删掉 思路:因 ...

  2. Cuckoo for Hashing_双哈希表

    问题 B: Cuckoo for Hashing 时间限制: 1 Sec  内存限制: 64 MB提交: 24  解决: 12[提交][状态][讨论版] 题目描述 An integer hash ta ...

  3. poj1200Crazy Search (哈希)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud Crazy Search Time Limit: 1000MS   Memory ...

  4. 洛谷 P3370 【模板】字符串哈希

    洛谷 P3370 [模板]字符串哈希 题目描述 如题,给定N个字符串(第i个字符串长度为Mi,字符串内包含数字.大小写字母,大小写敏感),请求出N个字符串中共有多少个不同的字符串. 友情提醒:如果真的 ...

  5. HASH 字符串哈希 映射转化

    哈希HASH的本质思想类似于映射.离散化. 哈希,通过给不同字符赋不同的值.并且钦定一个进制K和模数,从而实现一个字符串到一个模意义下的K进制数上. 它的主要目的是判重,用于$DFS$.$BFS$判重 ...

  6. 【CodeForces】961 F. k-substrings 字符串哈希+二分

    [题目]F. k-substrings [题意]给定长度为n的串S,对于S的每个k-子串$s_ks_{k+1}...s_{n-k+1},k\in[1,\left \lceil \frac{n}{2} ...

  7. 【Python算法】哈希存储、哈希表、散列表原理

    哈希表的定义: 哈希存储的基本思想是以关键字Key为自变量,通过一定的函数关系(散列函数或哈希函数),计算出对应的函数值(哈希地址),以这个值作为数据元素的地址,并将数据元素存入到相应地址的存储单元中 ...

  8. Redis源码研究:哈希表 - 蕫的博客

    [http://dongxicheng.org/nosql/redis-code-hashtable/] 1. Redis中的哈希表 前面提到Redis是个key/value存储系统,学过数据结构的人 ...

  9. codevs2147数星星(哈希)

    2147 数星星  时间限制: 3 s  空间限制: 64000 KB  题目等级 : 钻石 Diamond   题目描述 Description 小明是一名天文爱好者,他喜欢晚上看星星.这天,他从淘 ...

  10. 【CodeForces727E/CF727E】Games on a CD (字符串哈希)

    题目: CodeForces727E 分析: 看到字符串比较,肯定想到哈希啊--现学的哈希,先丢两个重要的公式 (\(seed\)是大于字符集大小的质数,\(p\)是大质数) \[hash[i]=(h ...

随机推荐

  1. [转帖]查看mysql分区名和各分区数据量

    – 查看mysql分区名和各分区数据量 SELECT table_name, partition_name, table_rows FROM information_schema.PARTITIONS ...

  2. [转帖]《Linux性能优化实战》笔记(十五)—— 磁盘IO的工作原理

    前一篇介绍了文件系统的工作原理,这一篇来看看磁盘IO的工作原理 一. 磁盘 1. 按存储介质分类 磁盘是可以持久化存储的设备,根据存储介质的不同,常见磁盘可以分为两类:机械磁盘和固态磁盘. 机械磁盘, ...

  3. [转帖]Linux下的I/O复用与epoll详解

    https://blog.csdn.net/weixin_39094034/article/details/110393127 前言 I/O多路复用有很多种实现.在linux上,2.4内核前主要是se ...

  4. Stream的简单学习

    Stream的简单学习 前言 https://github.com/jeffhammond/STREAM unzip STREAM-master.zip cd /STREAM-master/ make ...

  5. [转帖]Nginx四层负载均衡详解

    https://developer.aliyun.com/article/885599?spm=a2c6h.24874632.expert-profile.315.7c46cfe9h5DxWK 202 ...

  6. 一个简单的监控java进程获取日志的办法

    公司里面一个长时间运行的环境会出现问题, 这边简单写了一个脚本自动获取日志信息 脚本如下 注意 我的path 其实就是复用的 我们应用里面的jdk  剩下的就非常简单了. 每个日志都自动打包 并且移除 ...

  7. echarts中坐标与标签刻度对齐

    xAxis: { data: ["土地.房屋及建筑物", "遇用设备", "遇用设备", "裤子", "家具. ...

  8. 【K哥爬虫普法】微信公众号爬虫构成不正当竞争,爬虫er面对金山,如何避免滥用爬虫?

    我国目前并未出台专门针对网络爬虫技术的法律规范,但在司法实践中,相关判决已屡见不鲜,K 哥特设了"K哥爬虫普法"专栏,本栏目通过对真实案例的分析,旨在提高广大爬虫工程师的法律意识, ...

  9. hadoop实践01---hdfs分布式集群搭建与启动

    一.hdfs集群组成结构

  10. vs2019系统内置方法无提示

    有个同事问我为什么他的vs编写C#代码,对于引用System.dll中的方法,鼠标移上去没有方法的使用说明或接口注释,具体可以看下面的截图,而我绝大多数情况下是使用Rider开发,并没有遇到这个问题, ...