#2 double u 费了我一半时间,终于写出来了。(模拟) 思路&代码:先将所有w和m全部变成"uu""nn",存到ch字符数组中,再将只含u、n和除w、m以外的小写字母按顺序跑一遍,合并其中的uu、nn,知道ans==ch长度为止。 "uwu"->"u uu u"->"uu uu"->"ww" 这样避免重复讨论,从而简化代码量,降低本题复杂程度

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+7;
int T,s;
string r;
int main(){
    scanf("%d",&T);
    while(T--){
        scanf("%d",&s);
        cin>>r;
        char ch[N];
        int len=r.size(),p=0;
        for(int i=0;i<len;++i){
            if((r[i]=='w'||r[i]=='m')){
                if(r[i]=='w') {
                    ch[p++]='u';
                    ch[p++]='u';
                }
                if(r[i]=='m') {
                    ch[p++]='n';
                    ch[p++]='n';
                }
            }
            else ch[p++]=r[i];
        }
        char v=ch[0];
        int ans=s,z=0;
        bool done=false;
        for(int i=0;i<p;++i){
            if(ans==p) done=true;
            if(((v=='u'&&ch[i]=='u')||(v=='n'&&ch[i]=='n'))&&i>0&&ans<p&&!done&&!z){
                if(v=='u') cout<<'w';
                if(v=='n') cout<<'m';
                z=2;
                ans++;
            }
            else{
                if(!((ch[i]=='u'&&ch[i+1]=='u')||(ch[i]=='n'&&ch[i+1]=='n'))||done) cout<<ch[i];
            }
            v=ch[i];
            if(z) z-=1;
        }
        puts("");
    }
    return 0;
}