CF219C题解

· · 题解

还是很好弄滴 解释在代码里

#include<bits/stdc++.h>
using namespace std;
string s;
long n,k;
char adg;
bool panduan[100000];
long temp[100000];
long baoliu[100000];
long ans;
char ch[26]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
int main()
{
    cin>>n>>k;
    cin>>s;
    for(int i=0;i<n;i++)//字母转数字
    {
        temp[i]=s[i]-'A'+1; 
        baoliu[i]=s[i]-'A'+1;
    }

    if(k==2)//特判2
    {
        for(int i=0;i<n;i++)
        {
            if(temp[i]==1&&temp[i+2]==1)
            {
                temp[i+1]=2;
            }
            if(temp[i]==2&&temp[i]==2)
            {
                temp[i+1]=1;
            }
            if(temp[i]==1&&temp[i+1]==1)
            {
                temp[i]=2;
            }
                if(temp[i]==2&&temp[i+1]==2)
            {
                temp[i]=1;
            }
                if(temp[i]==2&&temp[i+1]==1&&temp[i+2]==1)
            {
                temp[i+2]=2;
            }
                if(temp[i]==1&&temp[i+1]==2&&temp[i+2]==2)
            {
                temp[i+2]=1;
            }
        }

    }
    else{   //k不等于2
            for(int i=1;i<n;i++)
    {
        for(int j=0;j<k;j++)
        {
            if(temp[i-1]==temp[i])
            {
                temp[i]++;
                if(temp[i]>k)
                {
                    temp[i]-=k;
                }
            }
        } 

    }
    }

    for(int i=0;i<n;i++)//统计改变数量
    {
        if(temp[i]!=baoliu[i])
        {
            ans++;
        }
    }
    cout<<ans<<endl;//输出
    for(int i=0;i<n;i++)
    {
        cout<<ch[temp[i]-1];
    }
    return 0;
}

思路仅供参考,并没奉上AC代码