题解:P13670 [GCPC 2023] Eszett

· · 题解

题意

给你一个字符串,首先需要将字符串转换为小写并输出。

接下来,你要对于转换后字符串中未更改过的 ss 更改为 B,每改完一次就输出,并恢复到原来的小写字符串。

做法

直接模拟即可,对于每次的 ss 如果未更改过,就更改并打上记号,避免重复。

AC code

#include<bits/stdc++.h>
using namespace std;
string s;
int vis[1000004];
signed main(){
    cin>>s;
    for(int i=0;i<s.size();i++){
        if(s[i]<='Z'&&s[i]>='A') {
            s[i]=s[i]-'A'+'a';
        }
        cout<<s[i];
    }
    cout<<endl; 
    while(1){
        bool flag=0;
        int x;
        for(int i=0;i<s.size();i++){
            if(i<s.size()-1&&s[i]=='s'&&s[i+1]=='s'&&!vis[i]){
                vis[i]=1;
                x=i;
                flag=1;
                i++;

            }
        }
        if(flag){
            for(int i=0;i<s.size();i++){
                if(i==x)
                    cout<<"B";
                    i++;
                }
                else{
                    cout<<s[i];
                }
            }
            cout<<"\n";
        }
        else break;
    }
}