Task 2.回文串计数

(calc.pas/calc.c/calc.cpp)

【题目描述】

虽然是一名理科生,Mcx常常声称自己是一名真正的文科生。不知为何,他对于背诵总有一种莫名的热爱,这也促使他走向了以记忆量大而闻名的生物竞赛。然而,他很快发现这并不能满足他热爱背诵的心,但是作为一名强大的Boer,他找到了这么一条自虐的方式——背诵基因序列。不过这实在是太虐心了,就连Mcx也有些招架不住。不过他发现,如果他能事先知道这个序列里有多少对互不相交的回文串,他或许可以找到记忆的妙法。为了进一步验证这个方法,Mcx决定选取一个由小写字母构成的字符串SS来实验。不过由于互不相交的回文串实在过多,他很快就数晕了。不过他相信,在你的面前这个问题不过是小菜一碟。

【名词解释】

1.对于字符串SS,设其长度为Len,那么下文用Si表示SS中第i个字符(1<=i<=Len)

2.s[i,j]表示SS的一个字串,s[i,j] = “SiSi+1Si+2…Sj-2Sj-1Sj”,比如当SS为”abcgfd”时,

s[2,5] = “bcgf” , s[1,5] = “abcgf”

3.当一个串被称为一个回文串当且仅当将这个串反写后与原串相同,如”abcba”

4.考虑一个四元组(l,r,L,R) , 当s[l,r]和s[L,R]均为回文串时,且满足1 <= l <=r< L <= R <= Len时,我们称s[l,r]和s[L,R]为一对互不相交的回文串。也即本题所求即为这种四元组的个数。两个四元组相同当且仅当对应的l,r,L,R都相同。

【题目输入】

仅一行,为字符串SS,保证全部由小写字母构成,由换行符标志结束。

【题目输出】

仅一行,为一个整数,表示互不相交的回文串的对数。

【样例输入】

aaa

【样例输出】

5

【样例解释】

SS = “aaa” , SS的任意一个字串均为回文串,其中总计有5对互不相交的回文串:

(1,1,2,2) , (1,1,2,3) , (1,1,3,3) , (1,2,3,3) , (2,2,3,3).  (这里使用名词解释中的四元组进行表示)

【数据范围】

50%的数据满足SS的长度不超过200

100%的数据满足SS的长度不超过2000

————————————分割线————————————

划分型DP.

 #include "cstdio"
#include "cstring"
#include "algorithm"
#include "fstream"
#include "iostream"
#include "sstream"
#include "cstdlib"
#include "cctype" using namespace std ;
const int maxN = 2e3 + 1e2 ;
typedef long long QAQ ; char s[ maxN ] ;
int Judge[ maxN ][ maxN ] ;
int f[ maxN ] ; inline void Init ( const int n ) {
for ( int i= ; i<n ; ++i ) Judge[ i ][ i ] = true ;
for(int i= ; i<n ; ++i ) {
for(int L=- ; i-L>= && i+L<n ; ++L ) {
if ( s [ i - L ] != s [ i + L ] ) break;
else Judge[ i - L ][ i + L ] = true ;
}
for(int L=- ; i-L>= && i+L+<n ; ++L ) {
if ( s [ i - L ] != s [ i + L + ] ) break;
else Judge[ i - L ][ i + L + ] = true ;
}
}
}
int main ( ) {
//freopen ( "calc.in" , "r" , stdin ) ; freopen ( "calc.out" , "w" , stdout ) ;
scanf ( "%s" , s ) ;int N = strlen ( s ) ;
Init ( N ) ;
f[ ] = ;
for ( int i= ; i<=N- ; ++i ) {
f[ i ] = f[ i - ] ;
for ( int j= ; j<=i ; ++j ) if ( Judge[ j ][ i ] ) ++ f[ i ] ;
}
unsigned long long Ans = ;
for ( int i= ; i<N ; ++i )
for ( int j=i ; j<N ; ++j )
if ( Judge[ i ][ j ] )Ans += f[ i - ] ;
cout << Ans << endl ;
return ;
}

2016-10-25  15:49:15

20161023 NOIP 模拟赛 T2 解题报告的更多相关文章

  1. 20161005 NOIP 模拟赛 T2 解题报告

    beautiful 2.1 题目描述 一个长度为 n 的序列,对于每个位置 i 的数 ai 都有一个优美值,其定义是:找到序列中最 长的一段 [l, r],满足 l ≤ i ≤ r,且 [l, r] ...

  2. 20161003 NOIP 模拟赛 T2 解题报告

    Weed duyege的电脑上面已经长草了,经过辨认上面有金坷垃的痕迹. 为了查出真相,duyege 准备修好电脑之后再进行一次金坷垃的模拟实验. 电脑上面有若干层金坷垃,每次只能在上面撒上一层高度为 ...

  3. 20161023 NOIP 模拟赛 T1 解题报告

    Task 1.纸盒子 (box.pas/box.c/box.cpp) [题目描述] Mcx是一个有轻度洁癖的小朋友.有一天,当他沉溺于数学卷子难以自拔的时候,恍惚间想起在自己当初学习概率的时候准备的一 ...

  4. 【HHHOJ】NOIP模拟赛 玖 解题报告

    点此进入比赛 得分: \(100+20+100=220\)(还不错) 排名: \(Rank\ 16\) \(Rating\):\(+20\) \(T1\):[HHHOJ263]「NOIP模拟赛 玖」三 ...

  5. 【HHHOJ】NOIP模拟赛 捌 解题报告

    点此进入比赛 得分: \(30+30+70=130\)(弱爆了) 排名: \(Rank\ 22\) \(Rating\):\(-31\) \(T1\):[HHHOJ260]「NOIP模拟赛 捌」Dig ...

  6. NOIP欢乐模拟赛 T2 解题报告

    小澳的坐标系 (coordinate.cpp/c/pas) [题目描述] 小澳者表也,数学者景也,表动则景随矣. 小澳不喜欢数学,可数学却待小澳如初恋,小澳睡觉的时候也不放过. 小澳的梦境中出现了一个 ...

  7. CH Round #55 - Streaming #6 (NOIP模拟赛day2)解题报告

    T1九九归一 描述 萌蛋在练习模n意义下的乘法时发现,总有一些数,在自乘若干次以后,会变成1.例如n=7,那么5×5 mod 7=4,4×5 mod 7=6,6×5 mod 7=2,2×5 mod 7 ...

  8. CH Round #54 - Streaming #5 (NOIP模拟赛Day1)解题报告

    最近参加了很多CH上的比赛呢~Rating--了..题目各种跪烂.各种膜拜大神OTZZZ T1珠 描述 萌蛋有n颗珠子,每一颗珠子都写有一个数字.萌蛋把它们用线串成了环.我们称一个数字串是有趣的,当且 ...

  9. 20161007 NOIP 模拟赛 T1 解题报告

    排序 3.1 题意描述 众所周知,熟练掌握至少一种排序算法是参加NOIP的必备技能.常见的排序算法有冒泡 排序.归并排序.快速排序.奇偶排序.猴子排序.梳排序.鸡尾酒排序.臭皮匠排序等. 在这里,介绍 ...

随机推荐

  1. Jni 调试 : eclipse + Vs 联合调试

    摘要: 本文原创,转载请注明地址 http://www.cnblogs.com/baokang/p/4982640.html 1.在Eclipse 中,Java 类中链接库引用到vs的debug目录下 ...

  2. php关于ob_start('ob_gzhandler')启用GZIP压缩的bug

    如果使用ob_start("ob_gzhandler"); 则ob_clean()后面的输出将不显示,这是个bug,可以用ob_end_clean();ob_start(" ...

  3. ORA-00600: internal error code, arguments: [SKGMFAIL], [2], [4], [4], [1], [], [], [], [], [], [], [

    ORA-00600: internal error code, arguments: [SKGMFAIL], [2], [4], [4], [1], [], [], [], [], [], [], [ ...

  4. Python语言常见异常错误类型

    在运行或编写一个程序时常会遇到错误异常,这时python会给你一个错误提示类名,告诉出现了什么样的问题(Python是面向对象语言,所以程序抛出的异常也是类).能很好的理解这些错误提示类名所代表的意思 ...

  5. 最常用的ES6特性(转)

    最常用的ES6特性 let, const, class, extends, super, arrow functions, template string, destructuring, defaul ...

  6. [PHP][位转换积累]之异或运算的简单加密应用

    异或的符号是^.按位异或运算, 对等长二进制模式按位或二进制数的每一位执行逻辑按位异或操作. 操作的结果是如果某位不同则该位为1, 否则该位为0. xor运算的逆运算是它本身,也就是说两次异或同一个数 ...

  7. 简单的c#winform象棋游戏(附带源码)

    算法源自网络(网络源码连接:http://www.mycodes.net/161/6659.htm)   整体思路:用二维数组构建棋盘每一个数组元素封装为一个picturebox附带若干属性(例如:棋 ...

  8. 在 Angularjs 中 ui-sref 和 $state.go 如何传递参数

    1 ui-sref.$state.go 的区别 ui-sref 一般使用在 <a>...</a>: <a ui-sref="message-list" ...

  9. Mysql Master-slave 主从配置

    MySQL主从复制 场景描述:主数据库服务器:192.168.10.130,MySQL已经安装,并且无应用数据.从数据库服务器:192.168.10.131,MySQL已经安装,并且无应用数据. 2. ...

  10. 两个单选按钮(一个是,一个否 ),一个div层,实现点击隐藏,显示div

    <script type="text/javascript"> function diva(){ document.getElementById('div1').sty ...