poj 2774 Long Long Message
来源:互联网 发布:关于矩阵的论文 编辑:程序博客网 时间:2024/05/20 20:55
第一个后缀数组,拍模版……
/* * Author: stormdpzh * Created Time: 2012/7/22 14:22:35 * File Name: poj_2774.cpp */#include <iostream>#include <cstdio>#include <sstream>#include <cstring>#include <string>#include <cmath>#include <vector>#include <queue>#include <stack>#include <map>#include <set>#include <algorithm>#include <functional>#define sz(v) ((int)(v).size())#define rep(i, n) for(int i = 0; i < n; i++)#define repf(i, a, b) for(int i = a; i <= b; i++)#define repd(i, a, b) for(int i = a; i >= b; i--)#define out(n) printf("%d\n", n)#define mset(a, b) memset(a, b, sizeof(a))#define wh(n) while(1 == scanf("%d", &n))#define whz(n) while(1 == scanf("%d", &n) && n != 0)#define lint long longusing namespace std;const int MaxN = 200005;char s[MaxN];int n;int sa[MaxN], height[MaxN], rank[MaxN], tmp[MaxN], top[MaxN];void makesa(){ int na = n < 256 ? 256 : n; mset(top, 0); rep(i, n) top[rank[i] = s[i] & 0xff]++; repf(i, 1, na - 1) top[i] += top[i - 1]; rep(i, n) sa[--top[rank[i]]] = i; for(int len = 1; len < n; len <<= 1) { int j; rep(i, n) { j = sa[i] - len; if(j < 0) j += n; tmp[top[rank[j]]++] = j; } sa[tmp[top[0] = 0]] = j = 0; repf(i, 1, n - 1) { if(rank[tmp[i]] != rank[tmp[i - 1]] || rank[tmp[i] + len] != rank[tmp[i - 1] + len]) top[++j] = i; sa[tmp[i]] = j; } memcpy(rank, sa, n * sizeof(int)); memcpy(sa, tmp, n * sizeof(int)); if(j >= n - 1) break; }}void lcp(){ int i, j, k; for(j = rank[height[i = k = 0] = 0]; i < n - 1; i++, k++) while(k >= 0 && s[i] != s[sa[j - 1] + k]) { height[j] = (k--); j = rank[sa[j] + 1]; }}bool check(int i, int len){ if(sa[i] < len && sa[i - 1] < len) return false; if(sa[i] > len && sa[i - 1] > len) return false; return true;}int main(){ while(1 == scanf("%s", s)) { int len = strlen(s); s[len] = 2; n = len; scanf("%s", s + n + 1); n = strlen(s); s[n] = 1; n++; makesa(); lcp(); int res = 0; rep(i, n) if(res < height[i] && check(i, len)) res = height[i]; printf("%d\n", res); } return 0;}
- poj 2774 Long Long Message
- POJ 2774 Long Long Message
- poj 2774 Long Long Message
- poj 2774 Long Long Message
- POJ 2774 Long Long Message
- POJ-2774-Long Long Message
- POJ 2774 Long Long Message
- POJ 2774 Long Long Message
- poj 2774 Long Long Message
- poj 2774 Long Long Message
- poj 2774 Long Long Message
- POJ 2774 Long Long Message
- POJ 2774 Long Long Message
- POJ 2774 Long Long Message
- POJ 2774 Long Long Message
- POJ - 2774 Long Long Message
- POJ 2774Long Long Message
- poj 2774 Long Long Message
- 数据库转powerdesigner
- xoom 真机开发
- c++调用lua脚本测试执行效率
- AM3517之SD卡启动盘恢复NAND flash的数据:x-loader(二)
- 第14 题: 题目:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。
- poj 2774 Long Long Message
- AM3517之SD卡启动盘恢复NAND flash的数据:U-boot(三)
- 找出字符串中第一个只出现一次的字符
- AM3517之SD卡启动盘恢复NAND flash的数据:uImage(四)
- 无题
- FS信息交互
- 黑马程序员-hashcode与equals的作用
- AM3517之SD卡启动盘恢复NAND flash的数据:文件系统(五)
- 自定义 QMessageBox