【HDOJ】4513 吉哥系列故事——完美队形II
2015-10-02 16:24
337 查看
这题目上学期就看了,不过最近发现可以用马拉车来解,而且还是基本算法。 稍微对回文串成立条件变形一下即可。
/* 4513 */ #include <iostream> #include <string> #include <map> #include <queue> #include <set> #include <stack> #include <vector> #include <deque> #include <algorithm> #include <cstdio> #include <cmath> #include <ctime> #include <cstring> #include <climits> #include <cctype> #include <cassert> #include <functional> #include <iterator> #include <iomanip> using namespace std; //#pragma comment(linker,"/STACK:102400000,1024000") #define sti set<int> #define stpii set<pair<int, int> > #define mpii map<int,int> #define vi vector<int> #define pii pair<int,int> #define vpii vector<pair<int,int> > #define rep(i, a, n) for (int i=a;i<n;++i) #define per(i, a, n) for (int i=n-1;i>=a;--i) #define clr clear #define pb push_back #define mp make_pair #define fir first #define sec second #define all(x) (x).begin(),(x).end() #define SZ(x) ((int)(x).size()) #define lson l, mid, rt<<1 #define rson mid+1, r, rt<<1|1 const int maxn = 1e5+5; int a[maxn], b[maxn*2]; int Len[maxn*2]; void init(int n) { int j = 0; b[j++] = -1; b[j++] = 0; rep(i, 0, n) { b[j++] = a[i]; b[j++] = 0; } } void manacher(int m) { int n = 2*m+1; int p = 0, p0 = 0; int lid, rid; rep(i, 1, n+1) { if (p > i) Len[i] = min(p-i, Len[2*p0-i]); else Len[i] = 1; while (b[i+Len[i]] == b[i-Len[i]]) { if (b[i+Len[i]] > 0) { lid = i - Len[i]; rid = i + Len[i]; if (b[lid]>b[lid+2] || b[rid]>b[rid-2]) break; } ++Len[i]; } if (i+Len[i] > p) { p = i + Len[i]; p0 = i; } } } void solve(int n) { init(n); manacher(n); int ans = 0; n = n*2+1; rep(i, 1, n) { ans = max(ans, Len[i]); } printf("%d\n", ans-1); } int main() { ios::sync_with_stdio(false); #ifndef ONLINE_JUDGE freopen("data.in", "r", stdin); freopen("data.out", "w", stdout); #endif int t; int n; scanf("%d", &t); while (t--) { scanf("%d", &n); rep(i, 0, n) scanf("%d", &a[i]); solve(n); } #ifndef ONLINE_JUDGE printf("time = %d.\n", (int)clock()); #endif return 0; }
相关文章推荐
- 如何用tomcat配置虚拟目录,方法要详细明了
- JAVA实现链表中倒数第K个节点问题(《剑指offer》)
- poj 3580 splay
- 《php和mysql web开发》笔记——第10章 使用MySQL数据库
- jackson 解析结合类(需要传入Class, 和 Class.Class, 回调方法是List<Class>)
- hdu 4813(2013长春现场赛A题)
- Hibernate懒加载
- Python基础
- 03 crawler
- ocp-33
- [LeetCode][JavaScript]Reverse Linked List II
- 栈——括号匹配
- ocp-32
- HDU 2100 模拟
- leetcode 288: Unique Word Abbreviation
- Add Two Numbers - leetcode002
- 应用服务器性能优化
- ios动画
- GO RPC
- 零基础学python-19.8 生成器表达式:当迭代器遇上列表解析