hdu5676 ztr loves lucky numbers (打表二分)

原创 2016年06月01日 20:14:35

ztr loves lucky numbers
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 1132 Accepted Submission(s): 478

Problem Description
ztr 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 ztr came across a positive integer n. Help him to find the least super lucky number which is not less than n.

Input
There are T(1≤n≤105) cases

For each cases:

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

Output
For each cases
Output the answer

Sample Input

2
4500
47

Sample Output

4747
47

#include<cstdio>
#include<algorithm>
#include<cmath>
#include<vector>
#include<iostream>
using namespace std;

typedef long long ll;

int bit(ll num){
    return log10(num)+1;
}
vector<ll> vec;

bool judge(ll num){
    int l4=0,l7=0;
    while(num){
        if(num%10==4){
            ++l4;
        }else if(num%10==7){
            ++l7;
        }else return false;
        num/=10;
    }
    return l4==l7;
}
void dfs(ll num){
    if(num&&judge(num))vec.push_back(num);
    if(bit(num)<18){
        ll nums=num*10+4;
        dfs(nums);
        nums=num*10+7;
        dfs(nums);
    }
}

int main(){
    int T;
    ll uu=19923;

    vec.clear();
    dfs(0LL);
    sort(vec.begin(),vec.end());
    scanf("%d",&T);
    int len=vec.end()-vec.begin();
    while(T--){
        ll n;
        scanf("%lld",&n);
        int pos=upper_bound(vec.begin(),vec.end(),n)-vec.begin();

        if(pos==len){
            printf("44444444447777777777\n");
        }else{
            printf("%lld\n",vec[pos]);
        }
    }
    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

HDU 5676 ztr loves lucky numbers dfs+二分

ztr loves lucky numbers                                                                         Time...
  • Houheshuai
  • Houheshuai
  • 2016年05月11日 20:06
  • 217

HDU 5676 ztr loves lucky numbers

HDU 5676 ztr loves lucky numbers
  • Dacc123
  • Dacc123
  • 2016年04月30日 21:54
  • 588

hdu5676 ztr loves lucky numbers 【打表】

学习打表的方式,刚开始自己固定7和4的个数打表,会有很多重复效率不高,应该用dfs从1个到9个去枚举7和4。 最大有一个答案是要超过long long 的所以要特判一下 /* ************...
  • xinag578
  • xinag578
  • 2016年05月01日 14:12
  • 321

hdu5676 ztr loves lucky numbers

题意:找到第一个比n大的幸运数,幸运数的定义是只由4或7组成,且4的个数等于7。 开始我的做法是暴力,按照每位贪心的找,坑点和要考虑的地方很多,写的很麻烦。#include using namesp...
  • yexiaohhjk
  • yexiaohhjk
  • 2016年05月01日 20:20
  • 392

hdu5676 ztr loves lucky numbers DFS+二分

ztr loves lucky numbers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java...
  • EventQueue
  • EventQueue
  • 2016年05月01日 11:57
  • 513

Lucky Number 2

B. Lucky Number 2 time limit per test 2 seconds memory limit per test 256 megabytes input stan...
  • xinghongduo
  • xinghongduo
  • 2012年01月24日 15:20
  • 1703

CodeForces - 96B Lucky Numbers (easy)

Lucky Numbers (easy) Time Limit: 2000MS   Memory Limit: 262144KB   64bit IO Format: %I6...
  • qq_18738333
  • qq_18738333
  • 2015年03月29日 02:08
  • 778

【CodeForces】96B - Lucky Numbers (easy)(模拟,字典序全排列)

B. Lucky Numbers (easy) time limit per test 2 seconds memory limit per test 256 megabytes inpu...
  • wyg1997
  • wyg1997
  • 2016年05月23日 21:20
  • 732

codeforces 96B Lucky Numbers (全排列)

Description Petya loves lucky numbers. Everybody knows that positive integers are lucky if their d...
  • wchhlbt
  • wchhlbt
  • 2016年07月26日 16:53
  • 349

【string】#84 A. Nearly Lucky Number

A. Nearly Lucky Number time limit per test 2 seconds memory limit per test 256 megabytes...
  • okcd00
  • okcd00
  • 2014年11月29日 21:24
  • 927
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:hdu5676 ztr loves lucky numbers (打表二分)
举报原因:
原因补充:

(最多只允许输入30个字)