Week12 CSP-M3 C - Gym 270437N

Posted qingoba

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Week12 CSP-M3 C - Gym 270437N相关的知识,希望对你有一定的参考价值。

题目描述:

技术图片

思路:

考虑一个字符,两种情况,A,B,

考虑两个字符,四种情况,AA,AB,BA,BB(其中AA,BB,满足要求)

考虑三个字符,八种情况,AAA,AAB,ABA,ABB,BAA,BAB,BBA,BBB(其中只有AAB和BBA 不满足情况)

考虑四个字符,还有必要考虑吗?没有了,因为任何形式的串,其子串除了BA,BBA,BBBA,AB,ABB,ABBB不满足情况,其他子串都能分割成两个长度为2或3的回文串

考虑五个字符,除了BA,BBA,BBBA,BBBBA,AB,AAB,AAAB,AAAAB之外,其他子串都能分割成两个长度为2或3或4的回文串

所以只有ABBBB和BAAAA这种子串不满足要求,其他都满足要求

代码:

#include <cstdio>
#include <iostream>
#include <string>
using namespace std;
typedef long long ll;
ll N,ans;
int main()
{
	cin>>N;
	string s;
	cin>>s;
	int lastPos=0,abOrba=0;
	ans=(N-1)*N/2;
	for(int i=1;i<N;i++)
	{
		if(s[i]!=s[i-1])
		{
			ans=ans-(i-lastPos);  //BAAAAAAB,i=7,LastPos=1,AB,AAB,AAAB,AAAAB,AAAAAB,AAAAAAB,正好6个 
			lastPos=i;
			abOrba++;
		}
	}
	lastPos=N-1;
	for(int i=N-2;i>=0;i--)
	{
		if(s[i]!=s[i+1])	//ABBBBBBA,i=1,lastPos=7
		{
			ans=ans-(lastPos-i);
			lastPos=i;
		}
	} 
	ans+=abOrba;
	cout<<ans<<endl;
	return 0; 
}

  

 

代码:

 

以上是关于Week12 CSP-M3 C - Gym 270437N的主要内容,如果未能解决你的问题,请参考以下文章

csp-M3-C-咕咕东学英语

csp-M3-C-咕咕东学英语

HIT ACM 2018春 week1 codeforces.com/gym/101652 题解

csp-M3-消消乐大师-Q老师

csp-M3-消消乐大师-Q老师

csp-M3-瑞神的序列