zoukankan      html  css  js  c++  java
  • CodeForces

    Petya loves lucky numbers. Everybody knows that positive integers are lucky if their decimal representation doesn't contain digits other than 4 and 7. For example, numbers 47, 744, 4 are lucky and 5, 17, 467 are not.

    Lucky number is super lucky if it's decimal representation contains equal amount of digits 4 and 7. For example, numbers 47, 7744, 474477 are super lucky and 4, 744, 467 are not.

    One day Petya came across a positive integer n. Help him to find the least super lucky number which is not less than n.

    Input

    The only line contains a positive integer n (1 ≤ n ≤ 10100000). This number doesn't have leading zeroes.

    Output

    Output the least super lucky number that is more than or equal to n.

    Examples
    Input
    4500
    Output
    4747
    Input
    47
    Output
    47

    题目大意:输入一个正整数,求不小与这个数的最小的超级幸运数(超级幸运数是4和7的个数相同的数,并且只有4和7)
    思路:这道题dfs能过真是吓到我了,数据这么大,这也能过只能说数据有点水,思路看代码吧
    #include<iostream>
    #include<string.h>
    #include<map>
    #include<cstdio>
    #include<cstring>
    #include<stdio.h>
    #include<cmath>
    #include<math.h>
    #include<algorithm>
    #include<set>
    #include<queue>
    typedef long long ll;
    using namespace std;
    const ll mod=1e9+7;
    const int maxn=1e6+10;
    const int maxk=5e3+10;
    const int maxx=1e4+10;
    const ll maxe=1000+10;
    #define INF 0x3f3f3f3f3f3f
    #define Lson l,mid,rt<<1
    #define Rson mid+1,r,rt<<1|1
    char a[maxn],ans[maxn];
    int len;
    bool dfs(int pol,int sum1,int sum2,bool limit)//当前位,4的个数,7的个数,是否已经没有限制了
    {
        if(pol>=len) return true;
        if(limit)//没有限制了,那么直接把剩余的4和7放进去就可以了
        {
            for(int i=0;i<sum1;i++) ans[pol++]='4';
            for(int i=0;i<sum2;i++) ans[pol++]='7';
            return true;
        }
        if(sum1&&a[pol]<='4')
        {
            if(dfs(pol+1,sum1-1,sum2,a[pol]!='4'))
            {
                ans[pol]='4';
                return true;
            }
        }
        if(sum2&&a[pol]<='7')
        {
            if(dfs(pol+1,sum1,sum2-1,a[pol]!='7'))
            {
                ans[pol]='7';
                return true;
            }
        }
        return false;//4和7都不能选,那么代表要加两位数了
    }
    int main()
    {
        cin>>a;
        len=strlen(a);
        if(len&1||!dfs(0,len/2,len/2,0))//如果长度是奇数的话直接加一位数,前面的是4后面的是7,判断偶数的时候是否有满足条件的数
        {
            if(len&1) len++;
            else len+=2;
            int i;
            for(i=0;i<len/2;i++) ans[i]='4';
            for(i;i<len;i++) ans[i]='7';
        }
        cout<<ans<<endl;
        return 0;
    }
    当初的梦想实现了吗,事到如今只好放弃吗~
  • 相关阅读:
    第19 章 : 调度器的调度流程和算法介绍
    第18 章 : Kubernetes 调度和资源管理
    关于一次配合开发工作而产生的服务器内核参数问题(Android 网络问题)
    第17 章 : 深入理解 etcd:etcd 性能优化实践
    第16 章 : 深入理解 etcd:基于原理解析
    第15 章 : 深入解析 Linux 容器
    第14 章 : Kubernetes Service讲解
    第13 章 : Kubernetes 网络概念及策略控制
    第12 章 : 可观测性-监控与日志
    第11 章 : 可观测性:你的应用健康吗?(liveness和readiness)
  • 原文地址:https://www.cnblogs.com/caijiaming/p/9431977.html
Copyright © 2011-2022 走看看