UVA 12206 - Stammering Aliens(Hash+LCP)
来源:互联网 发布:大逃杀新手知乎 编辑:程序博客网 时间:2024/05/17 12:49
UVA 12206 - Stammering Aliens
题目链接
题意:给定一个字符串,找出重复出现超过m次的字串的最大开始下标
思路:hash大法,需要点人品,然后二分答案,每次利用hash值去找出最大下标即可
代码:
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;typedef unsigned long long ull;const ull x = 123;const int N = 40005;int m, n;char str[N];ull H[N], Hp[N];void gethash() { H[n] = 0; for (int i = n - 1; i >= 0; i--)H[i] = H[i + 1] * x + str[i] - 'a';}struct Suf { int hash, id;} suf[N];bool cmp(Suf a, Suf b) { if (a.hash == b.hash) return a.id < b.id; return a.hash < b.hash;}int find(int L) { for (int i = 0; i < n - L + 1; i++) {suf[i].hash = H[i] - H[i + L] * Hp[L];suf[i].id = i; } sort(suf, suf + n - L + 1, cmp); int ans = -1; for (int i = 0; i < n - L + 1; i++) {int j, len = 0;for (j = i; suf[i].hash == suf[j].hash && j < n - L + 1; j++) len++;if (len >= m) { ans = max(ans, suf[j - 1].id);}i = j - 1; } return ans;}void solve() { if (find(1) == -1) printf("none\n"); else {int l = 1, r = n - m + 2;while (l < r) { int mid = (l + r) / 2; if (find(mid) == -1) r = mid; else l = mid + 1;}printf("%d %d\n", l - 1, find(l - 1)); }}int main() { Hp[0] = 1; for (int i = 1; i < N; i++)Hp[i] = Hp[i - 1] * x; while (~scanf("%d", &m) && m) {scanf("%s", str);n = strlen(str);gethash();solve(); } return 0;}
1 1
- UVA 12206 - Stammering Aliens(Hash+LCP)
- UVA - 12206 Stammering Aliens (hash)
- UVA 12206 Stammering Aliens(字符串hash)
- UVA 12206 Stammering Aliens(基于哈希值的LCP算法)
- 【Hash求LCP】HDU4080[Stammering Aliens]题解
- Uva LA 4513 Stammering Aliens(Follow the example, solve by lcp using hash)
- uvalive 4513 Stammering Aliens (基于Hash的LCP+二分)
- 重复出现超过m次的最长的子串的最大下标 后缀数组或Hash+LCP UVA 12206 - Stammering Aliens
- uva 12206 - Stammering Aliens(哈希)
- LA 4513(Stammering Aliens-Hash求LCP)[Template:hash求LCP]
- UVA 12206 - Stammering Aliens(后缀数组)
- UVA 12206 Stammering Aliens(后缀数组+二分)
- la4513 Stammering Aliens 字符串hash
- LA - 4513 - Stammering Aliens(Hash + 二分)
- hdu 4080 Stammering Aliens 二分 hash
- LA 4513 Stammering Aliens 字符串hash
- Uvalive 4513 Stammering Aliens(字符串Hash)
- UVALive 4513 Stammering Aliens hash+二分
- keil里面不能修改程序或加入程序
- Android程序的签名保护及绕过方法
- 把mysql读取的图片显示在jsp 页面上
- 二分查找(上界,下界)
- 如何搭建Selenium-Grid2环境(Java)(自动化测试技术)
- UVA 12206 - Stammering Aliens(Hash+LCP)
- charactersFound方法中的陷阱
- 黑马程序员02——基础1
- shell基础二:查找技巧,find及xargs的使用
- Linux/UNIX时间转换函数
- 一个反射方法响应web平台所有ajax数据请求,让web开发速度提高一倍
- 欧拉函数
- 索引
- Android NDK几点回调方式(device id & signature)