zoukankan      html  css  js  c++  java
  • Week12 CSP-M3 C

    题目描述:

    思路:

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

      

    代码:

     

  • 相关阅读:
    ntp网络时间服务搭建
    Docker虚拟化容器的使用
    第06章 Linux文件权限体系讲解
    Linux命令总结--sed命令
    Linux命令总结--date命令
    第05章 正则表达式及相关命令
    子网划分
    第04章系统目录结构知识讲解
    第03章Linux基础优化
    2.5linux命令介绍
  • 原文地址:https://www.cnblogs.com/qingoba/p/13051082.html
Copyright © 2011-2022 走看看