UVA12338Anti-Rhyme Pairs(哈希+二分最长前缀)
来源:互联网 发布:win10网络时间同步 编辑:程序博客网 时间:2024/06/08 01:11
题意:
给出一些串,询问任意两个的公共前缀。
分析:
对于每个串处理出所有前缀的HASH值,询问的时候二分公共前缀长度,比较HASH值是否相等。
#include<bits/stdc++.h>using namespace std;typedef long long ll;typedef unsigned long long ull;ull Hash, seed = 131;const int maxn = 100105;vector<ull> v[maxn];char s[maxn];int main(){ int t, n, m, a, b, kase = 1; scanf("%d", &t); while(t--) { scanf("%d", &n); for(int i = 0; i < n; i++) { scanf("%s", s); v[i+1].clear(); for(int j = 0, Hash = 0; s[j]; j++) { Hash = Hash * seed + s[j] - 'a'; v[i+1].push_back(Hash); } } scanf("%d", &m); printf("Case %d:\n", kase++); while(m--) { scanf("%d%d", &a, &b); int l = 0, r = min(v[a].size(), v[b].size())-1, mid, ans = 0; while(l <= r) { int mid = (l + r) >> 1; if(v[a][mid] == v[b][mid]) l = mid + 1, ans = mid; else r = mid - 1; } if(v[a][ans] != v[b][ans]) printf("%d\n", ans); else printf("%d\n", ans+1); } } return 0;}
阅读全文
0 0
- UVA12338Anti-Rhyme Pairs(哈希+二分最长前缀)
- uva12338 - Anti-Rhyme Pairs 询问最长公共前缀 HASH+二分
- 每次询问求出两个字符串的最长公共前缀的长度 后缀数组+RMQ+lcp UVA 12338 - Anti-Rhyme Pairs
- UVA 12338 哈希+二分最长前缀
- UVA 12238 Anti-Rhyme Pairs(hash+二分)
- UVA 12338 Anti-Rhyme Pairs (字符串哈希+二分)
- [UVa 12338] Anti-Rhyme Pairs (字符串哈希+二分)
- uva12338 Anti-Rhyme Pairs (字符串hash+二分)
- Anti-Rhyme Pairs - UVa 12338 哈希
- UVA - 12338 Anti-Rhyme Pairs (哈希)
- UVA 12338 Anti-Rhyme Pairs
- Uva 12338: Anti-Rhyme Pairs(Hash)
- 1624 取余最长路 (前缀和+set二分)
- 最长前缀
- 最长前缀
- UVA 12338 - Anti-Rhyme Pairs(后缀数组+RMQ)
- uva 12338 - Anti-Rhyme Pairs(后缀数组+RMQ)
- Rhyme/二分查找(binary search)Java版
- 7、集合
- 1101. Quick Sort (25)快排
- A
- 机器学习第三周(三)--正则化
- 大数据 (九)Hadoop-使用eclipe插件操作HDFS
- UVA12338Anti-Rhyme Pairs(哈希+二分最长前缀)
- hdu6063RXD and math(快速幂找规律)
- python random和numpy random
- 微信支付接口升级,微信支付免充值代金券开通
- C++学习之容器<vector>
- 南阳oj 题目57 6174问题
- Linux server 中手动配网命令
- hdu 6058
- 二、java运行环境按照之-linux centos下安装jdk步骤【rpm安装方式】