总结:
这道题题意有点难懂,我举一个例子吧。8 3 47774777。 第一次 44774777 第二次47774777 第三次 44774777
题目描述
定义一个数字为幸运数字当且仅当它的所有数位都是4或者7。
比如说,47、744、4都是幸运数字而5、17、467都不是。
假设现在有一个数字d,现在想在d上重复k次操作。
假设d有n位,用d 1,d 2,...,d n表示。
对于每次操作,我们想要找到最小的x (x < n),使得d x=4并且d x+1=7。
如果x为奇数,那么我们把d x和d x+1都变成4;
否则,如果x为偶数,我们把d x和d x+1都变成7;
如果不存在x,那么我们不做任何修改。
现在请问k次操作以后,d会变成什么样子。
比如说,47、744、4都是幸运数字而5、17、467都不是。
假设现在有一个数字d,现在想在d上重复k次操作。
假设d有n位,用d 1,d 2,...,d n表示。
对于每次操作,我们想要找到最小的x (x < n),使得d x=4并且d x+1=7。
如果x为奇数,那么我们把d x和d x+1都变成4;
否则,如果x为偶数,我们把d x和d x+1都变成7;
如果不存在x,那么我们不做任何修改。
现在请问k次操作以后,d会变成什么样子。
输入描述:
第一行两个整数n,k表示d的长度和操作次数。 第二行一个数表示d。数据保证不存在前导零。 1 <= n <= 100,000 0 <= k <= 1000,000,000
输出描述:
一个数字表示答案。
示例1
输入
7 4 4727447
输出
4427477
示例2
输入
4 2 4478
输出
4478
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<cstdio>
#define N 0x3f3f3f
using namespace std;
char s[100010];
int main()
{
int x,y;
cin>>x>>y;
cin>>s;
y=min(x,y);
for(int i=0;i<x-1;)
{
if(y==0)
break;
if(s[i]=='4'&&s[i+1]=='7')
{
if(i%2==0)
{
s[i]=s[i+1]='4';
i++;
y--;
continue;
}
else
{
s[i]=s[i+1]='7';
i=min(0,i-1);
y--;
continue;
}
}
i++;
}
cout<<s<<endl;
return 0;
}