| ||||||||||
Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
为什么一直超时不是实现了manacher吗#include<iostream> #include<string> int main() { int id = 1; std::string s; std::cin >> s; while (s != "END") { for (int i = 0; i <= s.length(); i += 2) s.insert(i, "#"); int lenmax = 1, r = 0, c = 0; int* len=new int[2000001]; for (int i = 0; i < s.length(); i++) { int j; if (i < r) len[i] = len[2 * c - i] < r + 1 - i ? len[2 * c - i] : r + 1 - i; else len[i] = 1; for (j = len[i]; i - j > -1 && i + j < s.length(); j++) if (s[i - j] != s[i + j]) break; else len[i]++; if (len[i] > lenmax) lenmax = len[i]; if (i + len[i]-1 > r) { r = i + len[i]-1; c = i; } } std::cout << "Case " << id++ << ": " << lenmax - 1 << std::endl; delete len; std::cin >> s; } return 0; } 吐血 Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator