YunYan

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

https://codeforces.com/contest/1238/problem/D

题目大意:统计good string的个数,good string的定义,给定的字符串中含有回文段落,

题解:给定的字符串,一共可以分割为n*(n-1)/2个段落,然后只有类似于ABBB,BAAA,AAAB,BBBA不含回文段,其他均含回文段,所以只要统计给定的字符串中其个数,然后相减就可以了

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
void solve(){
    ll n;
    cin>>n;
    string s;
    cin>>s;
    ll ans=0;
    ll sum=0;
    for(ll i=0;i<n;i++){
        if(s[i]=='B'){
            for(ll j=i-1;j>=0;j--){
                if(s[j]=='A') ans++;
                else break;
            }
            for(ll j=i+1;j<n;j++){
                if(s[j]=='A') ans++;
                else break;
            }
        }
        if(s[i]=='A'){
            for(ll j=i-1;j>=0;j--){
                if(s[j]=='B') ans++;
                else break; 
            }
            for(ll j=i+1;j<n;j++){
                if(s[j]=='B') ans++;
                else break;
            }
        }
    }
    for(ll i=1;i<n;i++){
        if(s[i]!=s[i-1]) sum++;
    }
    ans-=sum;
    cout<<n*(n-1)/2-ans<<endl; 
}
int main(){
    ios::sync_with_stdio(false);
    solve();
    return 0;
}

 

posted on 2019-10-11 21:11  Target--fly  阅读(496)  评论(0编辑  收藏  举报