您的位置:首页 > 其它

codeforces 159D dp + strings 好题

2013-08-29 10:36 169 查看
关键:很巧妙的枚举思路,枚举回文字符串中间字符的位置i,复杂度O(n),

然后统计  以i为起始位置的回文串的个数放在数组p[]中,以末尾位置的回文串的个数放在数组q[]中。

最后处理一下即可




View Code

#include<stdio.h>
#include<string.h>
#define lld __int64
char s[2006];
int p[2006], q[2006];
lld ans;
int main()
{
int i, j;
int l = strlen(gets(s+1));
int a, b;
for(i = 1; i <= l; i++)
{
for(a = i, b = i+1; a && b <= l && s[a] == s[b]; a--, b++)
p[a]++, q[b]++;
for(a = b = i; a && b <= l && s[a] == s[b]; a--, b++)
p[a]++, q[b]++;
}
for(i = l; i >= 1; i--)
p[i] += p[i+1];
for(i = 1; i <= l; i++)
ans +=(lld) p[i+1] * q[i];
printf("%I64d\n", ans);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: