传送门

求合法的串看一眼很不可做

考虑一下总方案减去不合法方案

考虑如何求不合法的串,首先串中连续的相同字符一定是回文串的一部分

然后考虑 $AB$ 交错的情况,发现对于某个 $A$ 它如果左右都有 $B$ 那么一定也是回文串的一部分

对于 $B$ 也是同理

那么只要考虑一段 $A$ 和一段 $B$ 连在一起的情况,发现当 $ABBBBB...$ 的时候,串是不合法的

当然 $BAAAAA...$ ,$AAAA...B$,$BBBB...A$ 也都是不合法的,其他情况显然都是合法的

然后所有情况都考虑完了,计算不合法情况很简单,直接看代码吧

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long ll;
inline int read()
{
int x=,f=; char ch=getchar();
while(ch<''||ch>'') { if(ch=='-') f=-; ch=getchar(); }
while(ch>=''&&ch<='') { x=(x<<)+(x<<)+(ch^); ch=getchar(); }
return x*f;
}
const int N=3e5+;
int n;
ll Ans;
char s[N];
int main()
{
n=read(); scanf("%s",s+);
int pre=; Ans=1ll*n*(n-)/;
for(int i=;i<=n;i++)
{
if(s[i]==s[i-]) continue;
Ans++;//注意这里 Ans++ 是因为 'AB'或'BA' 之后会再次被减去
Ans-=(i-pre);
pre=i;
}
pre=n;
for(int i=n-;i>=;i--)
{
if(s[i]==s[i+]) continue;
Ans-=(pre-i); pre=i;
}
printf("%lld\n",Ans);
return ;
}

最新文章

  1. iOS开发--ChildViewController实现订单页的切换
  2. php修改
  3. json数组的序列化和反序列化json数组的序列化和反序列化
  4. 详细说说 Google Test Certified 的各级——Level 2,3
  5. iOS - UI - UIStepper
  6. Google地图数据算法
  7. 关于全局变量和函数,在其他类中调用问题,extern关键字
  8. Qt之Windows资源文件(.rc文件)
  9. HDU 1164 Eddy&amp;#39;s research I【素数筛选法】
  10. Visual Studio跨平台开发实战(3) - Xamarin iOS多页面应用程式开发
  11. HDMI转MIPI DSI芯片方案TC358870XBG
  12. .1-Vue源码起步
  13. Git团队协作之GitFlow &amp; SoucceTree
  14. VUE v-for问题
  15. MySQL系列:视图基本操作(3)
  16. Python学习之旅(三十二)
  17. modern effective C++ -- Deducint Types
  18. Android开发(七)——判断网络状态
  19. eclipse调优
  20. GetProcAddress 使用注意事项

热门文章

  1. Spring Boot中的事务管理 隔离级别
  2. mybatis 语句中where 后边要跟必要条件和多个选择条件处理方法
  3. java实现二维码的生成与解析
  4. 剑指offer21----数组中奇数偶数
  5. Vue入门下
  6. ValueAnimator
  7. xcode 老项目library not found for -libstdc++.6.0.9
  8. C# 批处理制作静默安装程序包
  9. 20190903 - CSDN 的奇葩替换
  10. python-Web-django-商城-session存入数据库