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
  • 相关阅读:
    Android内存优化4 了解java GC 垃圾回收机制2 GC执行finalize的过程
    Android内存优化3 了解java GC 垃圾回收机制1
    Android内存优化2 了解java内存分配 2
    Android内存优化1 了解java内存分配 1
    Android Parcel对象详解
    Android中Parcel的分析以及使用
    Android进阶笔记:Messenger源码详解
    Android进阶笔记:AIDL内部实现详解 (二)
    Android进阶笔记:AIDL内部实现详解 (一)
    Android开发高级进阶——多进程间通信
  • 原文地址:https://www.cnblogs.com/gshdyjz/p/7419627.html
Copyright © 2011-2022 走看看