codeforces 96B Lucky Numbers (easy)

来源:互联网 发布:js 固定长度数组 编辑:程序博客网 时间:2024/05/16 06:21

B. Lucky Numbers (easy)
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output

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 477444 are lucky and 517467 are not.

Lucky number is super lucky if it's decimal representation contains equal amount of digits 4 and 7. For example, numbers 477744,474477 are super lucky and 4744467 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.

Examples
input
4500
output
4747
input
47
output
47

一开始写这道题的时候是用字符串来比对找到答案,后来看到这个题数据很小,可以暴力来做。

然后在网上学到了很厉害的一个函数next_permutation。用这个函数就可以将含47的超级幸运数字的各种情况在范围内的都找到。

#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <vector>using namespace std;typedef long long ll;int main(){    char a[8][20]={"47","4477","444777","44447777","4444477777"};    vector<ll> q;    int k=2;    for(int i=0;i<5;i++)    {        do        {            long long sum=0;            for(int j=0;j<k;j++)            {                sum*=10,sum+=a[i][j]-'0';            }            q.push_back(sum);        }while(next_permutation(a[i],a[i]+k));        k+=2;    }    int n;    while(~scanf("%d",&n))    {        ll ans=*lower_bound(q.begin(),q.end(),n);        printf("%lld\n",ans);    }    return 0;}