HDU 3856 Palindrome ( Manacher + RMQ + 二分 ) WA!!!
不知道错在哪了,求大神指教!!!
思路:用manacher求出每个以str[i]为中心轴的回文串的长度,RMQ预处理区间最大值,对于每个查询,二分最大回文串长,判定是否可行。
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm> using namespace std; const int MAXN = ; char str[ MAXN ];
int data[ MAXN * ];
int p[ MAXN * ];
int d[ MAXN * ][];
int n, len; void init()
{
int id,MaxL,MaxId;
int i;
MaxL=MaxId=;
len = strlen(&str[]);
for (i=; i <= len; i++)
{
data[(i<<)]=str[i];
data[(i<<)+]=;
}
data[]=;
data[]=;
n=(i<<)+;
data[n]=;
MaxId=MaxL=;
p[] = ;
for (i=; i<n; i++)
{
if (MaxId>i)
p[i]=min(p[*id-i],MaxId-i);
else
p[i]=;
while (data[i+p[i]] == data[i-p[i]])
p[i]++;
if (p[i]+i>MaxId)
MaxId=p[i]+i,id=i;
//printf( "p[%d]=%d\n", i, p[i] );
}
for ( i = ; i < n; ++i ) --p[i]; return;
} void RMQinit()
{
for ( int i = ; i <= n; ++i ) d[i][] = p[i];
for ( int j = ; ( << j ) <= n; ++j )
for ( int i = ; i + j - <= n; ++i )
d[i][j] = max( d[i][j - ], d[ i + (<<(j-))][j - ] );
return;
} int RMQquery( int L, int R )
{
int k = ;
while ( ( << (k + )) <= R - L + ) ++k;
return max( d[L][k], d[ R - ( << k ) + ][k] );
} bool check( int L, int R, int mid )
{
//if ( L + mid > R - mid ) return false;
int ans = RMQquery( L + mid, R - mid );
//printf("[%d %d]:%d\n", L + mid, R - mid, ans );
//printf("ans = %d, mid = %d\n", ans, mid );
if ( ans >= mid )
{
//puts("****");
return true;
}
return false;
} int BiSearch( int l, int r, int L, int R )
{
int ans = ;
while ( l <= r )
{
int mid = ( l + r ) >> ;
if ( check( L, R, mid ) )
{
l = mid + ;
ans = mid;
}
else r = mid - ;
}
return ans;
} int main()
{
int T;
scanf( "%d", &T );
getchar();
while ( T-- )
{
memset( d, , sizeof(d) );
memset( p, , sizeof(p) );
gets( &str[] );
init();
RMQinit(); int Q;
scanf( "%d", &Q );
while ( Q-- )
{
int a, b;
scanf( "%d%d", &a, &b );
if ( a < ) a = ;
if ( b > len ) b = len;
if ( a > len )
{
puts("");
continue;
}
if ( a > b ) swap( a, b );
int ans = BiSearch( , b - a + , a* - , b* + );
printf( "%d\n", ans );
}
getchar();
}
return ;
}
HDU 3856 Palindrome ( Manacher + RMQ + 二分 ) WA!!!的更多相关文章
- HDU 5089 Assignment(rmq+二分 或 单调队列)
Assignment Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total ...
- HDU 5726 GCD(RMQ+二分)
http://acm.split.hdu.edu.cn/showproblem.php?pid=5726 题意:给出一串数字,现在有多次询问,每次询问输出(l,r)范围内所有数的gcd值,并且输出有多 ...
- HDU 6230 Palindrome ( Manacher && 树状数组)
题意 : 给定一个字符串S,问你有多少长度为 n 的子串满足 S[i]=S[2n−i]=S[2n+i−2] (1≤i≤n) 参考自 ==> 博客 分析 : 可以看出满足题目要求的特殊回文子串其 ...
- hdu 5289 Assignment(2015多校第一场第2题)RMQ+二分(或者multiset模拟过程)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5289 题意:给你n个数和k,求有多少的区间使得区间内部任意两个数的差值小于k,输出符合要求的区间个数 ...
- hdu 3486 Interviewe (RMQ+二分)
Interviewe Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- *HDU3486 RMQ+二分
Interviewe Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- hdu 1159 Palindrome(回文串) 动态规划
题意:输入一个字符串,至少插入几个字符可以变成回文串(左右对称的字符串) 分析:f[x][y]代表x与y个字符间至少插入f[x][y]个字符可以变成回文串,可以利用动态规划的思想,求解 状态转化方程: ...
- hdu 4123 树形DP+RMQ
http://acm.hdu.edu.cn/showproblem.php? pid=4123 Problem Description Bob wants to hold a race to enco ...
- hdu 3433 A Task Process 二分+dp
A Task Process Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
随机推荐
- CNMeM is disabled
See here: http://deeplearning.net/software/theano/library/config.html You can change this in the env ...
- 第9章 初识HAL固件库
本章参考资料:<STM32F76xxx参考手册>.<STM32F7xx规格书>.<Cortex-M3权威指南>, STM32 HAL库帮助文档:<STM32F ...
- left join后面加上where条件浅析
select a.*,b.* from table1 a left join table2 b on b.X=a.X where XXX 如上:一旦使用了left join,没有where条件时,左表 ...
- loss 和accuracy的关系梳理
最近打算总结一下这部分东西,先记录留个脚印.
- 自学youku_web
仿youku架构 数据库设计 管理员 注册 登录 上传视频 删除视频 发布公告 普通用户 注册 登录 充会员 查看视频 下载免费视频 下载收费视频 查看观影记录 查看公告 思路 class Field ...
- mpvue项目中安装weui
观察一下发现,mpvue项目打包css的规律是:根组件App.vue里的style样式全部打包到 dist / static / css / app.wxss .. 参照微信小程序的原生引入使 ...
- elasticsearch-dsl聚合-1
接续上篇,本篇介绍elasticsearch聚合查询,使用python库elasticsearch-dsl进行聚合查询操作. 7.3.聚合查询 高阶概念 Buckets(桶/集合):满足特定条件的文档 ...
- Android内购订单验证 --- php实现
直接上代码: function googleVerify($sdata,$google_public_key) { $sdata = json_decode($sdata,true); $in_app ...
- SpringCloud框架搭建+实际例子+讲解+系列五
(4)服务消费者,面向前端或者用户的服务 本模块涉及到很多知识点:比如Swagger的应用,SpringCloud断路器的使用,服务API的检查.token的校验,feign消费者的使用.大致代码框架 ...
- QWidget 自带的最大化,最小化,关闭按键的设置
使用函数 setWindowFlags 参数: CustomizeWindowHint 去掉窗口所有自带按钮 Qt::CustomizeWindowHint | Qt::WindowCloseButt ...