CodeForces - 1238D(思维)
题意
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(思维)的更多相关文章
- Codeforces 424A (思维题)
Squats Time Limit: 1000MS Memory Limit: 262144KB 64bit IO Format: %I64d & %I64u Submit Statu ...
- Codeforces 1060E(思维+贡献法)
https://codeforces.com/contest/1060/problem/E 题意 给一颗树,在原始的图中假如两个点连向同一个点,这两个点之间就可以连一条边,定义两点之间的长度为两点之间 ...
- Queue CodeForces - 353D (思维dp)
https://codeforces.com/problemset/problem/353/D 大意:给定字符串, 每一秒, 若F在M的右侧, 则交换M与F, 求多少秒后F全在M左侧 $dp[i]$为 ...
- codeforces 1244C (思维 or 扩展欧几里得)
(点击此处查看原题) 题意分析 已知 n , p , w, d ,求x , y, z的值 ,他们的关系为: x + y + z = n x * w + y * d = p 思维法 当 y < w ...
- CodeForces - 417B (思维题)
Crash Time Limit: 1000MS Memory Limit: 262144KB 64bit IO Format: %I64d & %I64u Submit Status ...
- CodeForces - 417A(思维题)
Elimination Time Limit: 1000MS Memory Limit: 262144KB 64bit IO Format: %I64d & %I64u Submit ...
- CodeForces 625A 思维
题意是说一个人喝酒 有两种办法 买塑料瓶的 a块钱 喝了就没了 或者是买玻璃瓶的b块钱 喝完还能卖了瓶子c块钱 求最多能喝多少瓶 在开始判断一次 a与b-c的关系 即两种方式喝酒的成本 如果a< ...
- Vladik and Complicated Book CodeForces - 811B (思维实现)
Vladik had started reading a complicated book about algorithms containing n pages. To improve unders ...
- The Contest CodeForces - 813A (思维)
Pasha is participating in a contest on one well-known website. This time he wants to win the contest ...
随机推荐
- 在Mac上安装JDK1.8及环境变量配置
今天我们来讲一讲,在Mac上的JDK安装. 第一步,打开终端输入 java -version 看看是否本地已经安装了JDK,如果未安装,OK,继续- 第二步,到官网下载JDK.勾选“Accept Li ...
- Power BI 概念及 国内版Pro 试用账户注册流程
视频内容: Power BI 基本概念:https://v.qq.com/x/page/s3026nn69eu.html Power BI Pro 世纪互联版本试用账号注册:https://v.qq. ...
- WebShell代码分析溯源(九)
WebShell代码分析溯源(九) 一.一句话变形马样本 <?php $e = $_REQUEST['e'];$arr = array($_POST['pass'] => '|.*|e', ...
- C# -- 多线程向同一文件写入
1. 多线程向同一文件写入Log. public delegate void AsyncLog(string str1, string str2); private void Test() { Con ...
- [转]UiPath Keyboard Shortcuts
本文转自:https://docs.uipath.com/studio/docs/keyboard-shortcuts The complete list of keyboard shortcuts ...
- Ted:1 Vulnhub Walkthrough
主机层面端口扫描: ╰─ nmap -p1-65535 -sV -A 10.10.202.134 Starting Nmap 7.70 ( https://nmap.org ) at 2019-08- ...
- Android 弹出Dialog时隐藏状态栏和底部导航栏
上代码 dialog.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); di ...
- Redis安装部署以及简单应用
Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件. 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(list ...
- OOAD 面向对象的分析与设计
OOAD 面向对象的分析与设计 OOA-----分析阶段(针对业务问题清晰视图, 列出系统完成任务, 整理业务的公共词汇, 列出解决业务的解决方法) O ...
- C#语法基础----变量 符号 数据转换
变量的作用:为了更好的管理内存数据,不同类型的数据存放在不同的内存块中. 变量的特点:不同数据类型占用的存储空间大小不一样. 变量的意义:内存地址是一串十六进制数,非常不好记忆,通过变量可以快速找到数 ...