[ create a new paste ] login | about

Link: http://codepad.org/tUIXQQGT    [ raw code | output | fork ]

C++, pasted on Oct 28:
#include <iostream>
#include <string>
using namespace std;

int n,k;
char s[1000*1000];
bool not_changed=false;

void preobr(char *s){
	for (int i=0;i<n-1;i++)
		if (s[i]=='4' && s[i+1]=='7'){
			if ((i+1)%2==0)
				{s[i]='7';s[i+1]='7';}
			else
				{s[i]='4';s[i+1]='4';}
			return;
		}
	not_changed=true;
}		

int proverka(char *s){
	if (s[0]=='4' && s[1]=='7')
		return 0;
	for (int i=1;i<n-1;i++){
		if (s[i]=='4' && s[i+1]=='7' && (s[i-1]!='4' || (i+1)%2==1))
			return 0;
		if (s[i-1]=='4' && s[i]=='4' && s[i+1]=='7' && (i+1)%2==0)
			return i;
	}
	return 0;
}

int main(){
	cin>>n>>k;
	cin>>s;
	while (k>0){
		int p=proverka(s);
		if (p){
			if (k%2!=0)
				s[p]='7';
			break;
		}
		preobr(s);
		if (not_changed)
			break;
		k--;
	}
	cout<<s<<endl;
	return 0;
}


Output:
1



Create a new paste based on this one


Comments: