• Lucky Numbers (easy) 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 ≤ 109). This number doesn't have leading zeroes.

    Output

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

    Please, do not use the %lld specificator to read or write 64-bit integers in C++. It is preferred to use the cin, cout streams or the %I64d specificator.

    Example

    Input
    4500
    Output
    4747
    Input
    47
    Output
    47
     1 #include<cstdio>
     2 #include<string>
     3 #include<cstring>
     4 #include<iostream>
     5 #include<algorithm>
     6 using namespace std;
     7 typedef long long ll;
     8 
     9 const long long int INF=10000000000000;
    10 
    11 ll n,ans,mcnt;
    12 char vis[12][2];
    13 int a[12][2]={{4,7},{4,7},{4,7},{4,7},{4,7},{4,7},{4,7},{4,7},{4,7},{4,7},{4,7},{4,7}};
    14 
    15                
    16 void DFS(ll p,ll q,int cnt,int x,int y)
    17 {   ll tem=p*10+q;
    18     if(tem>=n&&x==y) ans=min(ans,tem);
    19     if(cnt==mcnt||cnt>12) return;
    20     
    21     for(int i=0;i<2;i++){
    22         if(vis[cnt][i]) continue;
    23         vis[cnt][i]=true;
    24         
    25         if(a[cnt][i]==4) DFS(tem,a[cnt][i],cnt+1,x+1,y);
    26         if(a[cnt][i]==7) DFS(tem,a[cnt][i],cnt+1,x,y+1);
    27          vis[cnt][i]=false;
    28     }
    29 }
    30 
    31 int main()
    32 {    while(cin>>n){
    33         memset(vis,false,sizeof(vis));
    34         mcnt=0,ans=INF;
    35         int nn=n;
    36         while(nn){
    37             nn=nn/10;
    38             mcnt++;
    39         }
    40         if(mcnt%2==0) mcnt+=2;
    41         if(mcnt%2!=0) mcnt+=1;
    42         DFS(0,0,0,0,0);
    43         cout<<ans<<endl;
    44     }     
    45     return 0;
    46 }
  • 相关阅读:
    GUI常用监听事件
    GUI容器之布局管理器
    布局管理器的综合应用
    GUI容器之Panel
    mongodb
    redis持久化
    本地window启动redis
    redis主从模式
    hash 哈希
    set集合
  • 原文地址:https://www.cnblogs.com/zgglj-com/p/7257979.html
Copyright © 2020-2023  润新知