CF96B Lucky Numbers (easy)(bfs)
Question:
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,474477are 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 (1<=n<=10^9). 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.
Code:
#include<iostream>
#include<iostream>
#include<string>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include<cstdio>
#include<queue>
using namespace std;
long long n;
queue<long long> q;
bool check(long long x)
{
int s = 0;
int q = 0;
while(x)
{
if(x % 10 == 7)
{
q++;
}
else
{
s++;
}
x /= 10;
}
return q == s;
}
int main()
{
cin>>n;
q.push(0);
while(!q.empty())
{
long long m = q.front();
q.pop();
if(m >= n && check(m))
{
cout<<m<<endl;
return 0;
}
else
{
q.push(m * 10 + 4);
q.push(m * 10 + 7);
}
}
return 0;
}