ztr loves lucky numbers
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 530 Accepted Submission(s): 224
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.
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.
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
Output the answer
Sample Input
2 4500 47
Sample Output
4747 47
Source
Recommend
bfs打表二分查找
accode:
#pragma warning(disable:4786)//使命名长度不受限制
#pragma comment(linker, "/STACK:102400000,102400000")//手工开栈
#include <map>
#include <set>
#include <queue>
#include <cmath>
#include <stack>
#include <cctype>
#include <cstdio>
#include <cstring>
#include <stdlib.h>
#include <iostream>
#include <algorithm>
#define rd(x) scanf("%d",&x)
#define rd2(x,y) scanf("%d%d",&x,&y)
#define rd3(x,y,z) scanf("%d%d%d,&x,&y,&z)
#define rdl(x) scanf("%I64d,&x);
#define rds(x) scanf("%s",x)
#define rdc(x) scanf("%c",&x)
#define ll long long int
#define ull unsigned long long
#define maxn 9999999
#define mod 1000000007
#define INF 77777777777777778LL
#define FOR(i,f_start,f_end) for(int i=f_start;i<=f_end;++i)
#define MT(x,i) memset(x,i,sizeof(x))
#define PI acos(-1.0)
#define E exp(1)
#define eps 1e-8
ll gcd(ll a,ll b){return b==0?a:gcd(b,a%b);}
ll mul(ll a,ll b,ll p){ll sum=0;for(;b;a=(a+a)%p,b>>=1)if(b&1)sum=(sum+a)%p;return sum;}
inline void Scan(int &x) {
char c;while((c=getchar())<'0' || c>'9');x=c-'0';
while((c=getchar())>='0' && c<='9') x=(x<<3)+(x<<1)+c-'0';
}
using namespace std;
ll dp[maxn];
int tot=0;
void bfs(){
ll n,t,m;
queue<long long>q;
q.push(4LL);
q.push(7LL);
tot =0;
while(!q.empty()){
n=q.front();q.pop();
t=n;
int x,y;
x=y=0;
while(t){
if(t%10==4)x++;
else y++;
t/=10;
}
if(x==y)
dp[tot++]=n;
if(n<INF){
m=n*10+4;
q.push(m);
m=n*10+7;
q.push(m);
}
}
}
int main(){
bfs();
sort(dp,dp+tot);
//cout<<tot<<'\12';
int t;
ll a;
scanf("%d",&t);
while(t--){
scanf("%I64d",&a);
if(a>dp[tot-1])printf("44444444447777777777\n");
else printf("%I64d\n",dp[lower_bound(dp,dp+tot,a)-dp]);
}
return 0;
}