zoukankan      html  css  js  c++  java
  • SDUT 2538 Lucky Transformation

    ---恢复内容开始---

    Lucky Transformation

    http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2538

    Time Limit: 1000MS    Memory limit: 65536K

    题目描述

    ZYJ非常喜欢幸运数字4,和7,他认为只要是只含有47的数字就是幸运的。比如,4,474477,7都是幸运的,427就不是。 现在有一个n位没有前导零的数字d,从最高位认为是第一位。ZYJ想看看这个数字能否经得起变化.如果这个数字里面有一个连着的“47,那么就做这样的操作:如果4的位数是奇数,那么就把47变成44,如果是偶数,那么就把47变成77。而且ZYJ闲着没事想做K次操作,每次只改变一个4所在位数最小的47.但是他再出门买食物的时候不小心用门把脑袋夹了,各位大神你可以帮ZYJ完成这个神圣而光荣的任务吗?(如果执行到m次后没有发现47,那么就直接输出m次以后的结果)

    输入

    第一行输入两个数nandk(1 ≤ n ≤ 105, 0 ≤ k ≤ 109)分别代表位数和执行次数。第二行输入这个数。

    输出

    输入操作后的结果。

    示例输入

    7 4
    4727447

    示例输出

    4427477



    2538
    
    #include<iostream>
    #include<cstdio>
    #include<map>
    #include<cstring>
    
    using namespace std;
    
    string num;
    int n,k;
    
    string change(string str){
        int i,len=str.length();
        for(i=0;i<len;i++)
            if(i+1<len && str[i]=='4' && str[i+1]=='7'){
                if((i+1)%2==1)
                    str[i+1]='4';
                else
                    str[i]='7';
                break;
            }
        return str;
    }
    
    int main(){
        while(scanf("%d%d",&n,&k)!=EOF){
            map<string,int> mp;
            cin>>num;
            mp[num]++;
            int flag=1;
            for(int i=1;i<=k;i++){
                num=change(num);
    
                if(flag && mp[num]){  //只寻找第一个周期的相应数字
                    k=k%i;
                    i=0;
                    flag=0;
                }
                mp[num]++;
            }
            cout<<num<<endl;
        }
        return 0;
    }
  • 相关阅读:
    Android Touch事件的分发过程
    使用runOnUiThread更新UI
    Sqlite访问数据库很慢的问题
    资源收集
    mongdb shard集群均衡导致宿主机CPU飙到100%处理
    Harbor安装
    springboot 启动脚本获取pid问题
    androidstudio build 时间太长处理
    修改 Docker 的 daemon.json后启动失败
    关于在centos7 64为引用android so引发的问题修复
  • 原文地址:https://www.cnblogs.com/jackge/p/2841526.html
Copyright © 2011-2022 走看看