*【CodeForces - 122D】Lucky Transformation(字符串问题,思维剪枝,优化,有坑,需注意的问题if的层次总结)

题干:

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 koperations 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.

题目大意:

    给定一个字符串,每次从左到右找第一个 47 ,然后判断其起始下标是偶数还是奇数,若为奇数,则替换为 44 ,否则替换为 77 ,最多操作 k 次,求最终结果。

解题报告:

  这题需要注意的是数据范围。 显然我们把 47 替换为 44 只会对当前位置以后产生影响,而替换为 77 则会对当前位置以前产生影响。若串中 i−1 i-1 的位置也为 4 ,则会发现 447 这部分会产生循环,此时可以直接得出结果,否则遍历一下原串照题意修改即可。

  值得注意的是,刚开始写的时候TLE了,是循环了多次,后来发现是不需要这样的,直接遍历一遍数组顺便更改字符串就好,主要还是因为那句:只有替换为77,才可能对以前的位置产生影响,否则的话都是直接遍历一遍就好了,不需要每次都从头找。

  还有一个要注意的地方,我是用string读的字符串,所以奇偶正好和题干叙述相反才对。

AC代码:

#include<string>
#include<iostream>
#define ll long long
using namespace std;
const int MAX = 1e5 +5;
int k,n;
int main()
{string s;cin>>n >> k;cin>>s;int len = s.length();int flag = 0;for(int i = 0; i<len-1 && k; i++) {if(s[i] == '4' && s[i+1] == '7') {if(i>=1 && s[i-1] == '4') {if(i%2==1) {if(k%2==1) {s[i] = '7';}k-=k,flag=1;continue;}}if(i%2==0) s[i+1]='4';else s[i]='7';flag=1;k--;}}cout << s << endl;return 0 ;}

1TLE:原因在于程序就写的和初心不符。那句本来就该放到这个if外面的。

#include<string>
#include<iostream>
#define ll long long
using namespace std;
const int MAX = 1e5 +5;
int k,n;
int main()
{string s;cin>>n >> k;cin>>s;int len = s.length();while(k>0) {int flag = 0;for(int i = 0; i<len-1; i++) {if(s[i] == '4' && s[i+1] == '7') {if(i>=1 && s[i-1] == '4') {if(i%2==1) {if(k%2==1) {s[i] = '7',k-=k,flag=1;break;//k-=k,flag=1;break;这三句应该放到这个if的外面}}}if(i%2==0) s[i+1]='4';else s[i]='7';	flag=1;k--;break;}}if(flag == 0) break;}cout << s << endl;return 0 ;} 

2TLE:这次就真的是因为思路的原因TLE了,考虑到了   扫到447时可以直接出结果,但是还是有数据可以卡到O(nk)的复杂度,所以肯定还是说不过去的。

#include<string>
#include<iostream>
#define ll long long
using namespace std;
const int MAX = 1e5 +5;
int k,n;
int main()
{string s;cin>>n >> k;cin>>s;int len = s.length();while(k>0) {int flag = 0;for(int i = 0; i<len-1; i++) {if(s[i] == '4' && s[i+1] == '7') {if(i>=1 && s[i-1] == '4') {if(i%2==1) {if(k%2==1) {s[i] = '7';}k-=k,flag=1;break;}}if(i%2==0) s[i+1]='4';else s[i]='7';	flag=1;k--;break;}}if(flag == 0) break;}cout << s << endl;return 0 ;} 

3WA:(由TLE到WA、、、Orz)其实这次原因也很简单,就是直接在上面那个程序上改的,所以break直接去掉了,改成ifelse了。。其实不应该这样的,应该continue才对。因为对于这个代码3,如果一个样例是4447,循环到44‘4’7的时候,进入了1,但是没进入2,本意是跳到3执行,但是这样的话就没执行3,而是直接i++到下一个for中了。

#include<string>
#include<iostream>
#define ll long long
using namespace std;
const int MAX = 1e5 +5;
int k,n;
int main()
{string s;cin>>n >> k;cin>>s;int len = s.length();
//	while(k>0) {int flag = 0;for(int i = 0; i<len-1 && k; i++) {if(s[i] == '4' && s[i+1] == '7') {if(i>=1 && s[i-1] == '4') {    //1if(i%2==1) {                //2if(k%2==1) {s[i] = '7';}k-=k,flag=1;}}else {                            //3if(i%2==0) s[i+1]='4';else s[i]='7';flag=1;k--;}}}
//	}cout << s << endl;return 0 ;}

总结:  还是要注意if的层次啊!是并列?还是包含关系?再看一遍这题!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/441511.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c/c++,字符,字符串,各种方式读入与对空格,回车的处理

#include<iostream> #include<string> using namespace std; int main() {char a[50],b[50],charr;//经测试&#xff0c;cin读入字符串&#xff0c;会识别空格和回车为截止&#xff0c;并且不会吞掉&#xff0c;//只是每次读的时候会从第一个不为空格/回车的字符开…

【CodeForces - 357D】Xenia and Hamming (字符串问题,数论,思维)

题干&#xff1a; Xenia is an amateur programmer. Today on the IT lesson she learned about the Hamming distance. The Hamming distance between two strings s  s1s2... sn and t  t1t2... tn of equal length n is value . Record [si ≠ ti] is the Iverson n…

【牛客 - 181D】小叶的巡查(树的直径,数学)

题干&#xff1a; 8102年&#xff0c;牛客系列竞赛空前繁荣。为了更好地管理竞赛&#xff0c;小叶决定巡查于各大城市之间&#xff0c;体察民情。所以&#xff0c;从一个城市马不停蹄地到另一个城市成了小叶最常做的事情。小叶有一个钱袋&#xff0c;用于存放往来城市间的路费…

【蓝桥杯 - 练习】k倍区间(思维,数组)

题干&#xff1a; http://lx.lanqiao.cn/problem.page?gpidT444 问题描述 给定一个长度为N的数列&#xff0c;A1, A2, ... AN&#xff0c;如果其中一段连续的子序列Ai, Ai1, ... Aj(i < j)之和是K的倍数&#xff0c;我们就称这个区间[i, j]是K倍区间。   你能求出数列中…

【 HDU - 1525 】Euclid's Game(较难找规律,玄学博弈,分析必败点必胜点)

题干&#xff1a; Two players, Stan and Ollie, play, starting with two natural numbers. Stan, the first player, subtracts any positive multiple of the lesser of the two numbers from the greater of the two numbers, provided that the resulting number must be…

【CodeForces - 569A】Music (数学公式化简,模拟追及问题)

题干&#xff1a; Little Lesha loves listening to music via his smartphone. But the smartphone doesnt have much memory, so Lesha listens to his favorite songs in a well-known social network InTalk. Unfortunately, internet is not that fast in the city of E…

【CodeForces - 569B】Inventory (标记,乱搞)

题干&#xff1a; Companies always have a lot of equipment, furniture and other things. All of them should be tracked. To do this, there is an inventory number assigned with each item. It is much easier to create a database by using those numbers and keep …

【CodeForces - 371D】Vessels(思维,元素合并,并查集)

题干&#xff1a; There is a system of n vessels arranged one above the other as shown in the figure below. Assume that the vessels are numbered from 1 to n, in the order from the highest to the lowest, the volume of the i-th vessel is ai liters. Initially…

【UVA - 10891 Game of Sum 】【HRBUST - 1622】 Alice and Bob (区间dp,博弈问题)

题干&#xff1a; 有一个长度为N的整数序列&#xff0c;Alice和Bob轮流取数&#xff0c;Alice先取。每次玩家只能从左端或者右端 取一个或多个数&#xff0c;但不能两端都取。所有数都被取走后游戏结束&#xff0c;然后统计每个人取走的所有数之和&#xff0c; 作为各自的得分…

code iban 是有什么组成_EAN-128码和Code-128码的区别

什么是Code-128码&#xff1f;什么是EAN-128码&#xff1f;二者之间有什么区别&#xff1f;接下来小编就给大家解除心中的疑惑。Code-128码是一种高密度的条形码&#xff0c;可表示从 ASCII 0 到ASCII 127 共128个字符&#xff08;其中包含数字&#xff0c;字母&#xff0c;符号…

计算机中丢失setupxml.dll,Win7电脑安装VideoStudio Pro X6显示丢失SetupXML.dll文件怎么解决...

最近有win7系统用户在电脑安装VideoStudio Pro X6软件的时候&#xff0c;突然出现错误的提示&#xff0c;显示无法启动此程序&#xff0c;因为计算机中丢失SetupXML.dll。尝试重新安装该程序来解决此问题&#xff0c;要怎么办呢&#xff0c;下面给大家讲解一下Win7电脑安装软件…

怎么p出模糊的照片_36. 盲去卷积 - 更加实用的图像去模糊方法

本文同步发表在我的微信公众号和知乎专栏“计算摄影学”&#xff0c;欢迎扫码关注&#xff0c;上一篇文章35. 去卷积&#xff1a;怎么把模糊的图像变清晰&#xff1f;吸引了很多朋友的关注。在这篇文章里面&#xff0c;我给大家讲了一种叫做“非盲去卷积”的方法&#xff0c;当…

【CodeForces - 1038A 】Equality (思维水题,预处理字符串)

题干&#xff1a; You are given a string ss of length nn, which consists only of the first kk letters of the Latin alphabet. All letters in string ss are uppercase. A subsequence of string ss is a string that can be derived from ss by deleting some of its…

docker修改镜像的存储位置_云原生存储详解:容器存储与 K8s 存储卷(内含赠书福利)...

作者 | 阚俊宝 阿里巴巴技术专家参与文末留言互动&#xff0c;即有机会获得赠书福利&#xff01;导读&#xff1a;云原生存储详解系列文章将从云原生存储服务的概念、特点、需求、原理、使用及案例等方面&#xff0c;和大家一起探讨云原生存储技术新的机遇与挑战。本文为该系列…

vb简易计算机器程序,vb简易计算器源码

代码如下&#xff1a;/***Author:乌鸟heart*Version:1.0*/Dim IntX As Double 全局变量&#xff0c;用于存储计算的数值Dim IntOperation As Double 标记运算类型Dim isBegin As Boolean 标记是否已经给IntX赋值Public Sub Clear() 清空命令函数screen.Caption ""En…

【CodeForces - 1038B 】Non-Coprime Partition (构造,数组特征)

题干&#xff1a; Find out if it is possible to partition the first nn positive integers into two non-empty disjoint sets S1S1 and S2S2 such that: gcd(sum(S1),sum(S2))>1gcd(sum(S1),sum(S2))>1 Here sum(S)sum(S) denotes the sum of all elements presen…

计算机专业用锐龙笔记本,轻松应对工作挑战——ThinkPad T14 锐龙版,适合办公的笔记本电脑...

拥有一部适合办公的笔记本电脑&#xff0c;可以成为商务人士忙碌工作中强有力的支持。联想旗下的ThinkPad 系列笔记本电脑&#xff0c;一直秉持为高端商务人士服务的理念&#xff0c;以稳定、流畅、安全的使用体验得到广泛认可。其中的ThinkPad T14 锐龙版&#xff0c;更是有着…

python tabula 使用方法_Python中os.walk()的使用方法

os.walk()主要用来扫描某个指定目录下所包含的子目录和文件。这篇文章将通过几个简单的例子来说明python中os.walk()的使用方法。假设我们的test文件夹有如下的目录结构&#xff1a;我们首先用os.walk扫描test文件夹下所有的子目录和文件&#xff1a;# 使用os.walk扫描目录 imp…

【CodeForces - 1038C】Gambling (博弈问题,优先队列模拟,贪心)

题干&#xff1a; Two players A and B have a list of nn integers each. They both want to maximize the subtraction between their score and their opponents score. In one turn, a player can either add to his score any element from his list (assuming his list…

乐乐勇智能教育机器人有多少型号_【头条】协作机器人平台化趋势将会是柔性自动化的破局之道...

智能机器人商情微信公众号&#xff0c;关注中国智能机器人行业热点与发展趋势&#xff0c;打造快捷高效的行业资讯交互平台。更多精彩内容&#xff0c;您可以点击标题下方的蓝字关注我们。导语艾利特平台级CS系列协作机器人全新发布9月15日上海工博会第一天&#xff0c;艾利特机…