noi2015模板-kmp
来源:互联网 发布:软件著作权许可 编辑:程序博客网 时间:2024/06/07 23:24
#include <iostream>#include <cstdio>#include <cstdlib>#include <cmath>#include <cstring>#include <algorithm>using namespace std;#define rep(i, l, r) for (int i = l; i <= r; i++)#define REP(i, l, r) for (int i = l; i >= r; i--)#define MAXN 1010int len, next[MAXN], a[MAXN][MAXN], T_T, n, minlen, l[MAXN], f[MAXN], ans;inline void getnext(int *a, int len) { memset(next, 0, sizeof(next)); next[0] = -1; int i = 0, j = -1; while(i < len-1) {if (!~j || a[i] == a[j]) i++, j++, next[i] = j;else j = next[j]; }}inline bool kmp(int *s, int n, int *a, int m) { getnext(a, m); int i = 0, j = 0; while (i < n) {if (!~j || s[i] == a[j]) i++, j++;else j = next[j];if (j == m) return 1; } return 0;}int main() { cin >> T_T; while (T_T--) {ans = 0;cin >> n;minlen = 12345678;char ch[MAXN];int kk;rep(i, 1, n) { scanf("%s", ch); if (int(strlen(ch)) < minlen) {minlen = int(strlen(ch));kk = 2*i - 1; } minlen = min(minlen, int(strlen(ch))); rep(j, 0, strlen(ch)-1) a[2*i-1][j] = int(ch[j]); rep(j, 0, strlen(ch)-1) a[2*i][strlen(ch)-1-j] = int(ch[j]); l[2*i-1] = l[2*i] = strlen(ch);}rep(L, 0, minlen-1) { rep(R, L, minlen-1) {memset(f, 0, sizeof(f));rep(i, 0, R-L) f[i] = a[kk][i+L];bool flag = 0;rep(i, 1, n) if (!kmp(a[2*i-1], l[2*i-1], f, R-L+1) && !kmp(a[2*i], l[2*i], f, R-L+1)) {flag = 1;break; }if (!flag) ans = max(ans, R-L+1); }}cout << ans << endl; }}
0 0
- noi2015模板-kmp
- noi2015模板-最小表示
- noi2015模板-后缀自动机
- noi2015模板-最近公共祖先
- noi2015模板-决策单调性
- NOI2015
- KMP模板
- KMP 模板
- kmp模板
- kmp模板
- kmp模板
- KMP模板
- kmp模板
- kmp模板
- KMP 模板
- 【模板】KMP
- KMP模板
- KMP模板
- 面试题目积累
- Knockout应用开发指南 第四章:模板绑定
- poj 2479 Maximum sum(递推)
- SqlServer2008基础知识:安全与权限
- Knockout应用开发指南 第五章:创建自定义绑定
- noi2015模板-kmp
- 用Javascript评估用户输入密码的强度(Knockout版)
- python实现单例模式
- android listview中checkbox(购物车,批量操作)
- LinearLayout中的属性baselineAligned的使用
- CRC TABLE的创建
- linux i2c 驱动
- Knockout应用开发指南 第八章:简单应用举例(1)
- [leetcode]Unique Binary Search Trees II