Times:5000ms;

Memory limit:262144 kB

给定字符串S(|S|<=5000),下标由1开始。然后Q个问题(Q<=1e6),对于每个问题,给定L,R,回答区间[L,R]里有多少个回文串。

请想出两种或者以上的方法。

------------------------分界线--------------------------

方法1:区间DP。

          容斥一下,dp[i][j]=dp[i][j-1]+dp[i+1][j]-dp[i+1][j-1]+ok[i][j],(ok表示是否是个回文串)。

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=;
int dp[maxn][maxn],ok[maxn][maxn],N,Q;
char c[maxn];
void DP()
{
for(int i=N;i>=;i--)
for(int j=i;j<=N;j++){
if(j-i==) ok[i][j]=,dp[i][j]=;
else if(j-i==) dp[i][j]=ok[i][j]=dp[i][i]+dp[j][j]+(c[i]==c[j]?:);
else {
ok[i][j]=ok[i+][j-]&(c[i]==c[j]);
dp[i][j]=dp[i+][j]+dp[i][j-]-dp[i+][j-]+ok[i][j];
}
}
}
int main()
{
scanf("%s",c+);
N=strlen(c+);
DP();
scanf("%d",&Q);
while(Q--){
int x,y; scanf("%d%d",&x,&y);
printf("%d\n",dp[x][y]);
}
return ;
}

方法2: 

        马拉车:每个为起点,然后预处理得到每个为起点的回文串个数前缀和。 为了训练,就先不给带代码了。

方法3:回文树,这个我还不会。

方法4:暴力,开始我以为暴力得到回文串,然后差分得到前缀和,但是前缀和涉及到了交叉问题可能会导致出错。所以,目前还不行。(不过别人说可以,那再想想)

CodeForces-245H:Queries for Number of Palindromes(3-14:区间DP||回文串)的更多相关文章

  1. dp --- Codeforces 245H :Queries for Number of Palindromes

    Queries for Number of Palindromes Problem's Link:   http://codeforces.com/problemset/problem/245/H M ...

  2. codeforces 245H Queries for Number of Palindromes RK Hash + dp

    H. Queries for Number of Palindromes time limit per test 5 seconds memory limit per test 256 megabyt ...

  3. Codeforces 245H Queries for Number of Palindromes

    http://codeforces.com/contest/245/problem/H 题意:给定一个字符串,每次给个区间,求区间内有几个回文串(n<=5000) 思路:设定pd[i][j]代表 ...

  4. Codeforces 245H Queries for Number of Palindromes:区间dp

    题目链接:http://codeforces.com/problemset/problem/245/H 题意: 给你一个字符串s. 然后有t个询问,每个询问给出x,y,问你区间[x,y]中的回文子串的 ...

  5. Queries for Number of Palindromes(求任意子列的回文数)

    H. Queries for Number of Palindromes time limit per test 5 seconds memory limit per test 256 megabyt ...

  6. codeforces 245H . Queries for Number of Palindromes 区间dp

    题目链接 给一个字符串, q个询问, 每次询问求出[l, r]里有多少个回文串. 区间dp, dp[l][r]表示[l, r]内有多少个回文串. dp[l][r] = dp[l+1][r]+dp[l] ...

  7. codeforces H. Queries for Number of Palindromes(区间dp)

    题目链接:http://codeforces.com/contest/245/problem/H 题意:给出一个字符串还有q个查询,输出每次查询区间内回文串的个数.例如aba->(aba,a,b ...

  8. K - Queries for Number of Palindromes(区间dp+容斥)

    You've got a string s = s1s2... s|s| of length |s|, consisting of lowercase English letters. There a ...

  9. 【CF245H】Queries for Number of Palindromes(回文树)

    [CF245H]Queries for Number of Palindromes(回文树) 题面 洛谷 题解 回文树,很类似原来一道后缀自动机的题目 后缀自动机那道题 看到\(n\)的范围很小,但是 ...

随机推荐

  1. Jetson TK1 三:项目相关安装

    ROS.QT.pyserial2.7.罗技手柄驱动.navigation.slam和rviz等 激光雷达IP设置,tk1对应的IP设置,tk1串口设置 一.安装ros参见官网 二.安装QT 百度QT官 ...

  2. python socket非阻塞及python队列Queue

    一. python非阻塞编程的settimeout与setblocking+select 原文:www.th7.cn/Program/Python/201406/214922.shtml 侧面认证Py ...

  3. intellij idea springmvc web工程之helloworld

    1.新建java工程 2.设置项目 2.添加jar包 3.配置web.xml <?xml version="1.0" encoding="UTF-8"?& ...

  4. dwarf调试信息格式入门

    https://www.prevanders.net/dwarf.html#testingcomment http://www.dwarfstd.org/ http://www.cnblogs.com ...

  5. [vxlan] 二 什么是VXLAN

    VXLAN是一种mac in UDP的技术.简单讲就是传统的二层帧被封装到了UDP的package中.通过UDP的IP网络发送到目的地然后再解封装. VXLAN 跟VLAN对比,最重要的一个概念就是V ...

  6. 在canvas上面拖拽对象。

    原文:https://html5.litten.com/how-to-drag-and-drop-on-an-html5-canvas/ 下面作者的原始的版本会抖动一下(鼠标刚点下去的时候,位置会发生 ...

  7. 电脑技巧 ADSL如何远程盗号

    ADSL如何远程盗号 开头语: 本文中揭露了黑客攻击ADSL用户,窃取用户名密码的常见方法,读者请勿将其用于不法用途,并提醒所有与此漏洞相关的用户尽快采取措施进行防范. ADSL作为一种宽带接入方式已 ...

  8. Multi-company rules

    Object Name Domain 说明 Point of Sale Point Of Sale Order [('company_id', '=', user.company_id.id)] 指派 ...

  9. [iOS]APP代码实践:建立一个辅助的APP类,降低对AppDelegate的改动

    郝萌主倾心贡献.尊重作者的劳动成果,请勿转载. [UIApplication sharedApplication].delegate 可是时间长了还是认为这样不太好,AppDelegate本身有其自己 ...

  10. JavaScript中label语句的使用

    之前在读<javascript高级程序设计>的时候,看到过lable语句,当时看完感觉好像很少用到,但是今天,刚好在项目终于到了合适的场景,合理使用label可以大幅度优化性能. 首先来简 ...