码迷,mamicode.com
首页 > 其他好文 > 详细

Week12 CSP-M3 C - Gym 270437N

时间:2020-06-05 18:02:00      阅读:65      评论:0      收藏:0      [点我收藏+]

标签:字符   out   name   ring   typedef   long   种子   情况   return   

题目描述:

技术图片

思路:

考虑一个字符,两种情况,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

标签:字符   out   name   ring   typedef   long   种子   情况   return   

原文地址:https://www.cnblogs.com/qingoba/p/13051082.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!