Codeforces Beta Round #91 (Div. 1 Only) B. luckTransformation(简单模拟+区分特殊情况)

这道题的就是简单得模拟即可;

但是要注意的地方是当存在447的情况是会出现无限循环 :477 447 477 447........

所以要把它当成特别情况拿出来区分,这样才不会超时

if(0==k) break;的位置要放对,应该在一进循环就判断k是否为0;不能等操作过一次之后再判断

#include<iostream>
#include<cstring>
#include<map>
using namespace std;

char st[100100];

int main(){
    int n,k,counter;
    scanf("%d%d",&n,&k);
    scanf("%s",st+1);
    
    for(int i=1;i<n;i++){
        if(0==k) break;
        if(st[i]=='4'&&st[i+1]=='7'){
            k--;
            if(i%2==1){
                st[i+1]='4';
                if(i+2<=n&&st[i+2]=='7'){
                    st[i+1]=(k&1)?'7':'4';
                    break;
                }
            }
            else st[i]=st[i+1]='7',i-=2;            
        }        
    }
    printf("%s
",st+1);
    return 0;
}
原文地址:https://www.cnblogs.com/yuanshixingdan/p/5482491.html