题意

https://vjudge.net/problem/CodeForces-1238D

如果一个字符串的每个字母,属于至少一个(长度大于1)的回文串,则称这个字符串为good。

一个长度为n的字符串s(只由字母A,B组成),问s的子串中有多少个good字符串

思路

发现只有XYX这种交错的串或者XX…X才可能是good串。

直接做比较难,我们考虑求不合法的串。

所以我们先正着遍历一遍字符串,找出XXXXY这种,即通过s[i]!=s[i-1]计算前面相同字符的个数,即为不合法串的个数(XY,XXY,XXXY,XXXXY都不合法)

再倒着遍历一遍,找出XYYYY这种,即通过s[i]!=s[i+1]计算后面相同字符的葛素,即为不合法串的个数(XY,XYY,XYYY,XYYYY)

但我们也可以发现,这样做会把XY这种减两遍,事实是正着算算成了XY,倒着算算成了YX,所以再遍历一遍,把XY这种交错的个数算出来。

长度为1的串肯定不合法,所以用总的串(n-1+1)*(n-1)/2 减去上面不合法的情况,再加上多减的XY。

代码

#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
#define ll long long
const int N=200005;
const int mod=1e9+7;
const double eps=1e-8;
const double PI = acos(-1.0);
#define lowbit(x) (x&(-x))
int main()
{
std::ios::sync_with_stdio(false);
ll n;
cin>>n;
string s;
cin>>s;
ll ans=n*(n-1)/2,cnt=1;
for(int i=1;i<n;i++)//XXXXY
{
if(s[i]==s[i-1]) cnt++;
else ans-=cnt,cnt=1;
}
cnt=1;
for(int i=n-2;i>=0;i--)
{
if(s[i]==s[i+1]) cnt++;
else ans-=cnt,cnt=1;
}
for(int i=1;i<n;i++)
if(s[i]!=s[i-1])
ans++;
cout<<ans<<endl;
return 0;
}

  

CodeForces - 1238D(思维)的更多相关文章

  1. Codeforces 424A (思维题)

    Squats Time Limit: 1000MS   Memory Limit: 262144KB   64bit IO Format: %I64d & %I64u Submit Statu ...

  2. Codeforces 1060E(思维+贡献法)

    https://codeforces.com/contest/1060/problem/E 题意 给一颗树,在原始的图中假如两个点连向同一个点,这两个点之间就可以连一条边,定义两点之间的长度为两点之间 ...

  3. Queue CodeForces - 353D (思维dp)

    https://codeforces.com/problemset/problem/353/D 大意:给定字符串, 每一秒, 若F在M的右侧, 则交换M与F, 求多少秒后F全在M左侧 $dp[i]$为 ...

  4. codeforces 1244C (思维 or 扩展欧几里得)

    (点击此处查看原题) 题意分析 已知 n , p , w, d ,求x , y, z的值 ,他们的关系为: x + y + z = n x * w + y * d = p 思维法 当 y < w ...

  5. CodeForces - 417B (思维题)

    Crash Time Limit: 1000MS   Memory Limit: 262144KB   64bit IO Format: %I64d & %I64u Submit Status ...

  6. CodeForces - 417A(思维题)

    Elimination Time Limit: 1000MS   Memory Limit: 262144KB   64bit IO Format: %I64d & %I64u Submit  ...

  7. CodeForces 625A 思维

    题意是说一个人喝酒 有两种办法 买塑料瓶的 a块钱 喝了就没了 或者是买玻璃瓶的b块钱 喝完还能卖了瓶子c块钱 求最多能喝多少瓶 在开始判断一次 a与b-c的关系 即两种方式喝酒的成本 如果a< ...

  8. Vladik and Complicated Book CodeForces - 811B (思维实现)

    Vladik had started reading a complicated book about algorithms containing n pages. To improve unders ...

  9. The Contest CodeForces - 813A (思维)

    Pasha is participating in a contest on one well-known website. This time he wants to win the contest ...

随机推荐

  1. django-channels的部署(supervisor+daphne+nginx)

    项目中需要一个聊天室的功能,所以需要websocket通信,选择了使用channels模块,主要记录下channels部署的配置和一些坑. 原项目是通过nginx+uwsgi部署的,这里我没做任何改动 ...

  2. MinU: v2 Vulnhub Walkthrough

    主机层面扫描: 22 和 3306 端口 3306 端口默认是MySQL端口,但是这里尝试爆破报错,最后通http访问发现非MySQL协议,而是一个http的服务 http的协议我们进行目录枚举下 枚 ...

  3. JS Navigator

    JS Navigator window.navigator 对象包含有关访问者浏览器的信息. Window Navigator window.navigator 对象在编写时可不使用 window 这 ...

  4. 使用objc runtime实现iOS绿色的懒加载

    使用objc runtime实现懒加载 地址:AutoPropertyCocoa 本文所指懒加载形式如下 - (id)lazyloadProperty{ if(_lazyloadProperty == ...

  5. 记录/objc2/object_setClass做了啥

    inline Class objc_object::changeIsa(Class newCls) { // This is almost always true but there are // e ...

  6. Docker运行dotnetcore

                    windows下安装docker 参考: https://www.jianshu.com/p/502b4ac536ef https://docs.docker.com/ ...

  7. leetcode题解:整数反转

    给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 示例 1: 输入: 123 输出: 321  示例 2: 输入: -123 输出: -321 示例 3: 输入: 120 输出 ...

  8. BITCTF-MISC

    MISC 以此笔记来记录本菜鸡做misc的历程 签到85 首先看题 提示base85 打开kali,使用python的base64库来解码(内有base85解码) (其实只要输python3即可 我还 ...

  9. springboot+quartz+数据库存储

    Spring整合Quartz a.quartz调度框架是有内置表的 进入quartz的官网http://www.quartz-scheduler.org/,点击Downloads, 下载后在目录\do ...

  10. 《移动WEB前端高级开发实践@www.java1234.com》——3

    React Flux: Flux将一个应用分成四个部分. View: 视图层 Action(动作):视图层发出的消息(比如mouseClick) Dispatcher(派发器):用来接收Actions ...