uva 12206 - Stammering Aliens(哈希)
来源:互联网 发布:2010nba总决赛数据 编辑:程序博客网 时间:2024/06/05 16:16
题目链接:uva 12206 - Stammering Aliens
题目大意:给出一个字符串,找出至少出现m次的最长子串。
解题思路:哈希算法,将每个后缀数组建立一个哈希值,每次二分长度判断,每次判断时将哈希值排序,计数即可。
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;typedef unsigned long long ll;const int maxn = 40005;const int x = 123;int N, M, pos, Rank[maxn];char str[maxn];ll h[maxn], xp[maxn], Hash[maxn];void init () { scanf("%s", str); N = strlen(str); h[N] = 0; for (int i = N - 1; i >= 0; i--) h[i] = h[i+1] * x + str[i] - 'a'; xp[0] = 1; for (int i = 1; i <= N; i++) xp[i] = xp[i-1] * x;}bool cmp (const int& a, const int& b) { return Hash[a] < Hash[b] || (Hash[a] == Hash[b] && a < b);}bool judge (int l) { int c = 0, n = N - l + 1; pos = -1; for (int i = 0; i < n; i++) { Rank[i] = i; Hash[i] = h[i] - h[i+l] * xp[l]; } sort (Rank, Rank + n, cmp); for (int i = 0; i < n; i++) { if (i == 0 || Hash[Rank[i]] != Hash[Rank[i-1]]) c = 0; if (++c >= M) pos = max(pos, Rank[i]); } return pos >= 0;}void bsearch () { if (!judge(1)) { printf("none\n"); return; } int l = 1, r = N + 1; while (r - l > 1) { int mid = (r + l) / 2; if (judge(mid)) l = mid; else r = mid; } judge(l); printf("%d %d\n", l, pos);}int main () { while (scanf("%d", &M) == 1 && M) { init(); bsearch(); } return 0;}
1 0
- uva 12206 - Stammering Aliens(哈希)
- UVA - 12206 Stammering Aliens (hash)
- UVA 12206 - Stammering Aliens(Hash+LCP)
- UVA 12206 - Stammering Aliens(后缀数组)
- UVA 12206 Stammering Aliens(后缀数组+二分)
- UVA 12206 Stammering Aliens(字符串hash)
- Stammering Aliens 【二分+哈希】
- UVA 12206 Stammering Aliens(基于哈希值的LCP算法)
- zoj 3395 Stammering Aliens
- LA 4513 Stammering Aliens
- HDOJ 4080 Stammering Aliens
- HDOJ 4080 Stammering Aliens
- LA4513 Stammering Aliens
- LA 4513 - Stammering Aliens
- LA 4513 Stammering Aliens
- LA 4513 Stammering Aliens
- HDU 4080 Stammering Aliens
- LA 4513 Stammering Aliens
- subString()在JDK6和JDK7中的区别
- 简单理解Struts2中拦截器与过滤器的区别及执行顺序
- 拥塞避免算法
- Rails自带用户验证has_secure_password的使用与源码分析
- Two Sum leetcode
- uva 12206 - Stammering Aliens(哈希)
- socket 编程之网络地址
- java socket 一服务器对多客户端
- 进程
- atitit.提升稳定性---hibernate 增加重试retry 机制解决数据库连接关闭
- android 时间处理(夏令时)
- 简易真正的tab栏
- 为KVM客户机添加virsh console支持
- 爱立信笔试题目-mutable关键字