1. 程式人生 > >Lucky Transformation (4 7轉換)規律題

Lucky Transformation (4 7轉換)規律題

Petya loves lucky numbers. Everybody knows that lucky numbers are positive integers whose decimal representation contains only the lucky digits 4 and 7. For example, numbers 47, 744, 4 are lucky and 5, 17, 467 are not.

Petya has a number consisting of n digits without leading zeroes. He represented it as an array of digits without leading zeroes. Let’s call it d. The numeration starts with 1, starting from the most significant digit. Petya wants to perform the following operation k times: find the minimum x (1 ≤ x < n) such that dx = 4 and dx + 1 = 7, if x is odd, then to assign dx = dx + 1 = 4, otherwise to assign dx = dx + 1 = 7. Note that if no x was found, then the operation counts as completed and the array doesn’t change at all.

You are given the initial number as an array of digits and the number k. Help Petya find the result of completing k operations.

Input The first line contains two integers n and k (1 ≤ n ≤ 105, 0 ≤ k ≤ 109) — the number of digits in the number and the number of completed operations. The second line contains n digits without spaces representing the array of digits d, starting with d1. It is guaranteed that the first digit of the number does not equal zero.

Output In the single line print the result without spaces — the number after the k operations are fulfilled.

Examples Input 7 4 4727447 Output 4427477 Input 4 2 4478 Output 4478 Note In the first sample the number changes in the following sequence: 4727447 → 4427447 → 4427477 → 4427447 → 4427477.

In the second sample: 4478 → 4778 → 4478. 哇,這次學長不知道怎麼了,和4 7趕上了。這個題目就是在一個字串裡找尋47,找到之後,如果4的位置是奇數,就將47改為44,否則就將47改為77。在後一種情況下,需要注意,這是這個題裡最大的坑,如果沒有改之前是447,那麼就將陷入一個迴圈,2333。這個題目是改完之後,從字串頭開始遍歷。若是447,之後便是477,447,477,447,如此迴圈下去。這樣我們就沒有必要再迴圈了,直接找尋k的奇偶性,在那個位置直接改掉就可以了。如果k是偶數447中間的4 的位置就改為4,否則改為7。這樣就ok了,不會超時,92ms就ac了。 程式碼如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;

const int maxx=1e5+10;
char a[maxx];
int n,k;

int main()
{
	while(cin>>n>>k)
	{
		getchar(); 
		gets(a);
		for(int i=0;i<n&&k;i++)
		{
			if(a[i]=='4'&&a[i+1]=='7')
			{
				if((i+1)&1) a[i+1]='4';
				else if(!((i+1)&1))
				{
					if(a[i-1]=='4')
					{
						if(k&1) a[i]='7';
						else a[i]='4';
						break;
					}
					else a[i]='7';
				}
				--k;
			}
		}
		puts(a);
	}
	return 0;
}

努力加油a啊,(o)/~。