题目描述
烤乐滋又生日了!占虽然过去了整整一年,可他还是对去年发生的炸弹事件充满阴影。于是决定不让来访的好友们自带礼物。
但生日怎么能没有礼物昵?烤乐滋决定拿出他的幻想珠串来.幻想珠是一颗上面写着小写英文字母的珠子。有些珠子自带神奇的魔力,上面写着一个”?”,就表示这颗珠子可以表示任意一个小写英文字母。幻想珠串是长长的一个个幻想珠首尾相连组成的串。烤乐滋决定,让每个朋友从这个珠串中挑选一段连续的串送给自己。
烤乐滋很喜欢回文(从前往后和从后往前读一样),于是他希望朋友挑选出的串都是回文的。比如”ababa”和” acd?a”都是回文的,而”a?d?c”就不是回文的。
烤乐滋想要知道,整个幻想珠串中一共能挑选出多少个回文的子串。两个位置不同内容相同的子串我们也视作是不同的子串。
但生日怎么能没有礼物昵?烤乐滋决定拿出他的幻想珠串来.幻想珠是一颗上面写着小写英文字母的珠子。有些珠子自带神奇的魔力,上面写着一个”?”,就表示这颗珠子可以表示任意一个小写英文字母。幻想珠串是长长的一个个幻想珠首尾相连组成的串。烤乐滋决定,让每个朋友从这个珠串中挑选一段连续的串送给自己。
烤乐滋很喜欢回文(从前往后和从后往前读一样),于是他希望朋友挑选出的串都是回文的。比如”ababa”和” acd?a”都是回文的,而”a?d?c”就不是回文的。
烤乐滋想要知道,整个幻想珠串中一共能挑选出多少个回文的子串。两个位置不同内容相同的子串我们也视作是不同的子串。
输入
第一行一个数n(n≤3000),表示幻想珠串的长度。
第二行一个有n 个字符.只可能是小写字母或”?”。字符之间没有多余空格。
第二行一个有n 个字符.只可能是小写字母或”?”。字符之间没有多余空格。
输出
一行一个数表示答案。
#include <bits/stdc++.h> #define ll long long using namespace std; char mp[10005]; int n,ant; void work() { for(int i=0;i<n;i++) { for(int j=0;i+j<n&&i-j>=0;j++) { if(mp[i+j]==mp[i-j]) ant++; else if(mp[i+j]=='?'||mp[i-j]=='?') ant++; else break; } for(int j=0;i+j<n&&i-j-1>=0;j++) { if(mp[i+j]==mp[i-j-1]) ant++; else if(mp[i+j]=='?'||mp[i-j-1]=='?') ant++; else break; } } } int main() { scanf("%d",&n); scanf("%s",mp); work(); printf("%d ",ant); return 0; }