您当前的位置: 首页 > 

HeartFireY

暂无认证

  • 3浏览

    0关注

    334博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Educational Codeforces Round 116 (Rated for Div. 2) A.B.C

HeartFireY 发布时间:2021-10-31 13:21:15 ,浏览量:3

A.AB Balance 思维

题目大意: B A ( s ) BA(s) BA(s)代表字符串中 b a ba ba的数量, A B ( s ) AB(s) AB(s)代表字符串中 a b ab ab的数量。每次可以选择 s s s中的一个字符替换为 a , b a,b a,b,求在最小操作次数下让 B A ( s ) = A B ( s ) BA(s)= AB(s) BA(s)=AB(s)后得到的字符串。

思路分析:题目要求使 a b ab ab和 b a ba ba平衡,那么我们考虑什么时候能够达成平衡条件:对于一个字串单位 a b a aba aba或 b a b bab bab,其 a b ab ab和 b a ba ba的数量是平衡的。

那么我们再考虑非法的情况,如果出现 a b b 、 b a a abb、 baa abb、baa,不难发现如果前后拼接字符如果都相同的话,那么一定会构成 b a b bab bab类型,如果先后分别加相反字符( a a a a a b b b b b aaaaabbbbb aaaaabbbbb、 b b b b b a a a a a bbbbbaaaaa bbbbbaaaaa),那么只需要修改首尾字符即可。我们继续将这个结论进行推广,很容易发现对于任意的字符串,字串内部一定存在①.相等的 a b 、 b a ab、ba ab、ba字串数目②.二者相差 1 1 1.

那么对于给定的字符串,只需要判断是否字符串首尾字符是否相等,如果不相同则修改为相同即可。

#include 
using namespace std;

inline void solve(){
    char s[1000]; cin >> s;
    int len = strlen(s);
    if (len > 1 && s[0] != s[len - 1]){
        if (s[len - 1] == 'a') s[len - 1] = 'b';
        else s[len - 1] = 'a';
    }
    cout  n >> k;
    int now = 1, cnt = 0;
    if(n == 1){ cout             
关注
打赏
1662600635
查看更多评论
0.0361s