题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4426
WA:
1.k有没有 long long
2.回文串是取前一半
解题思路:
利用回文树获取本质不同的回文串的数量以及他们回文串前一半第一次出现的位置(起点终点位置)。
我们搞一个结构体:记录上面的信息,同时还需要一个变量计算hash值
对于每一次询问,我们O(N)预处理整个串的hash以及26的幂次方(后者总共只需预处理一次),然后O(1)计算每个回文串的hash值,sort对结构体按照hash大小排个序。
排好序后,然后开一个数组维护排序后回文串数量前缀和,二分查找k,看k落在哪个前缀和里面,就取哪个前缀和下标对应结构体的hash值
代码:
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<cmath>
#include<map>
#include<set>
using namespace std;
#define l