zoukankan      html  css  js  c++  java
  • 幸运序列(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;
    }
    PEACE
  • 相关阅读:
    大部分人都会做错的经典JS闭包面试题
    20071109 QQ群:ITIL和ITSM 聊天记录,欢迎大家加入QQ群:48132184
    模式窗口window.open造成Session丢失的解决方法
    Server.Transfer 方法如何传递复杂的参数
    小游戏测试你的情商
    VS.Net 开发 MSN一样缓慢出来的提示信息的方法
    Javascript 技巧大全
    ASP.NET 2.0,无刷新页面新境界! 【转】
    ASP.NET AJAX入门系列【转】
    asp.net2.0+ajax开发的无刷新聊天室Demo【转】
  • 原文地址:https://www.cnblogs.com/gshdyjz/p/7419627.html
Copyright © 2011-2022 走看看