幸运序列(lucky) 模拟

【问题描述】

Ly喜欢幸运数字,众所周知,幸运数字就是数字位上只有4和7的数字。

但是本题的幸运序列和幸运数字完全没关系,就是一个非常非常普通的序列。哈哈,是不是感觉被耍了,没错,你就是被耍了。

Ly现在手上有一个长度为N的幸运序列a,他想这样子折腾这个序列:

  1. 如果已经折腾了k次了,就结束,否则找到一个最小的i,使得(a[i]=’4’ && a[i+1]=’7’)  //0<i<N;
  2. 找不到这样的i就结束;
  3. 如果odd(i),令a[i+1]=a[i],否则令a[i]=a[i+1],继续第一步。

Ly想让你告诉他最后序列折腾成什么样子了。

需要注意的是,本题的序列从1开始编号

【输入文件】

第一行N,K;

第二行N个数描述序列a。

【输出文件】

N个数,输出最后的序列。

【输入样例】


7 4

4727447

【输出样例】


4427477

【数据规模和约定】

20%:  小数据

100%的数据中N<=100000,K<=109



刚开始看到这题,我tm直接暴力模拟一遍,结果忘记了判断循环的情况,结果直接爆零了。

实际上我们判断一下循环的情况就好了。

代码:

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#define ll long long
#define il inline
#define db double
using namespace std;
il int gi()
{
    int x=0,y=1;
    char ch=getchar();
    while(ch<‘0‘||ch>‘9‘)
    {
        if(ch==‘-‘)
        y=-1;
        ch=getchar();
    }
    while(ch>=‘0‘&&ch<=‘9‘)
    {
        x=x*10+ch-‘0‘;
        ch=getchar();
    }
    return x*y;
}
il ll gl()
{
    ll x=0,y=1;
    char ch=getchar();
    while(ch<‘0‘||ch>‘9‘)
    {
        if(ch==‘-‘)
        y=-1;
        ch=getchar();
    }
    while(ch>=‘0‘&&ch<=‘9‘)
    {
        x=x*10+ch-‘0‘;
        ch=getchar();
    }
    return x*y;
}
int n,k,begin=1;
int que[100045];
bool vis[100045];
il bool find()
{
    for(int i=begin;i<n;i++)
    if(que[i]==4&&que[i+1]==7)
    {
        if(i%2)
        {
            que[i+1]=4;
            begin=i+1;
        }
        else
        {
            que[i]=7;
            begin=i-1;
        }
        if(vis[i]&&k%2==0)
            return 0;
        vis[i]=1;
        return 1;
    }
    return 0;
}
int main()
{
    freopen("lucky.in","r",stdin);
    freopen("lucky.out","w",stdout);
    n=gi(),k=gi();
    for(int i=1;i<=n;i++)
    que[i]=getchar()-‘0‘;
    while(k--)
    {
        if(!find())
        break;
    }
    for(int i=1;i<=n;i++)
    printf("%d",que[i]);
    return 0;
}
时间: 2024-12-06 13:17:24

幸运序列(lucky) 模拟的相关文章

[测试题]幸运序列(lucky)

Description Ly喜欢幸运数字,众所周知,幸运数字就是数字位上只有4和7的数字. 但是本题的幸运序列和幸运数字完全没关系,就是一个非常非常普通的序列.哈哈,是不是感觉被耍了,没错,你就是被耍了. Ly现在手上有一个长度为N的幸运序列a,他想这样子折腾这个序列: 如果已经折腾了k次了,就结束,否则找到一个最小的i,使得(a[i]=’4’ && a[i+1]=’7’)  //0<i<N; 找不到这样的i就结束: 如果odd(i),令a[i+1]=a[i],否则令a[i]=

纪中5日T3 1566. 幸运锁(lucky.pas/c/cpp)

1566. 幸运锁(lucky.pas/c/cpp) 题目描述 有一把幸运锁,打开它将会给你带来好运,但开锁时需要输入一个正整数(没有前导0).幸运锁有一种运算,对于一个正整数,返回他的相邻两位数字间的差,如1135,运算结果为22(会去掉前导0). 现在已知只有经过反复运算最终结果为7的数才能打开这把锁,给你一个区间[a,b],问该区间中有多少个能打开幸运锁的幸运数. 输入 第一行两个整数a,b. 输出 一个整数K,表示共有多少个这样的数. 样例输入 1 10 样例输出 1 数据范围限制 [限

模拟---LCR

HDU  2778 Description LCR is a simple game for three or more players. Each player starts with three chips and the object is to be the last person to have any chips. Starting with Player 1, each person rolls a set of three dice. Each die has six faces

PAT线性结构_一元多项式求导、按给定步长反转链表、出栈序列存在性判断

02-线性结构1. 一元多项式求导 (25) 设计函数求一元多项式的导数.(注:xn(n为整数)的一阶导数为n*xn-1.) 输入格式:以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以空格分隔. 输出格式:以与输入相同的格式输出导数多项式非零项的系数和指数.数字间以空格分隔,但结尾不能有多余空格.注意“零多项式”的指数和系数都是0,但是表示为“0 0”. 输入样例: 3 4 -5 2 6 1 -2 0 输出样例: 12 3 -10 1 6 0 最简单的方式是用

幸运素数

幸运数是经由类似埃拉托斯特尼筛法的演算法后留下的整数集合,是在1955年波兰数学家乌拉姆提出. 由一组由1开始的数列为例: 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25, …先将所有偶数删去,只留下奇数: 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25,…然后把数列中的第 2 个数字(设该数字为 x )的倍数对应的数删除,即把所有第 nx,x∈Z+ 个

约瑟夫-从模拟到毒瘤

约瑟夫真是个好题. 约瑟夫的题有模拟,递推的标签.于是有两大类算法,三种题目. 入门练习类 复杂度$\Theta(NM)$ 一般作者为了显示是个入门题会出$10^3 ~ 3 \times 10^4$的数据范围.(额,出到$10^5$仿佛还没见过) 而且一般会问整个序列. 模拟这个过程. 于是,有例子: $5$个人报数,每报到$3$这个人就出列,下一个人从1开始报. 使用$LaTeX$.分$4$步 $$\begin{array}{ccccc}1&2&3&4&5\\1&

playtime-浙大羽协裁判部训练方案[随机事件序列的应用]

首先随机一列人名 然后按比例随机一列事件项. 然后将不确定项的人名更正为“某人”[比如发球违例,,,你怎么知道谁在发球] 最后定义一个初始化. 初始化呢,就是挑边. 球权还是场权? 发球还是接发? 谁发球?谁接发? 然后呢,我们就可以按这个序列,模拟执裁一场比赛: 模拟执裁比赛,,有什么用?就是要教会小朋友用裁判表.和规范措辞. 这表不是那么好用的...得培训很多次才能成为成熟的裁判. 我执裁了两届校赛,三届校新,都是决赛主裁[18校赛的时候我吹了包括团体在内的四项决赛],才算勉强成型的校园裁判

2017/8/4 考试吐槽

2017 8 4 得分:110 一句话:江南皮革厂倒闭了!会的东西全带着他们的小姨子跑了!成绩统统二十分!统统二十分! A.聪明的质检员 链接:http://cogs.pro/cogs/problem/problem.php?pid=631 题意:找到一个式子:Y_i = \sum_j 1 \times \sum_j v_j ,  j \in [L_i, R_i] \text{且} w_j \ge W, j \text{是矿石编号}与标准差绝对值最小的情况. 吐槽:二分写成三分--少写一个库--

python基础(3)---流程控制

流程控制 与C语言不通的是python的流程控制代码块不是用{}花括号表示的,而是强制缩进来控制的:而且缩进必须一致,官方推荐是使用4个空格,不建议使用tab(制表符)做缩进,一是不同的系统tab所占宽度不一致,会比较乱,二是由于python要求同级缩进必须保持一致,所以有些时候看上去是对齐l,但是有的是空格有的是tab键,使得不容易排错,另外条件判断的语句不需要使用()括起来,但是条件语句后面使用: 1.条件判断--if语句 条件判断就是执行某个代码段之前先进行判断,如果符合再执行某个代码块