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

mac2022-06-30  74

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

但是要注意的地方是当存在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\n",st+1); return 0; }

 

转载于:https://www.cnblogs.com/yuanshixingdan/p/5482491.html

最新回复(0)