hdu 5676 ztr loves lucky numbers
2016-05-24 07:52
429 查看
ztr loves lucky numbers
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 1112 Accepted Submission(s): 468
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
4000
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
首先找出所有的幸运数字,再进行查找
例如47 74 4477 4747 4774 7447 7474 7744.........
用dfs枚举即可,再存放在set中,用lower_bound查找第一个不小于输入数字的元素。
当输入大于 777777777444444444时,满足条件的下一个幸运数超出long long 的范围,所以要特判。#include <iostream>
#include <cstdio>
#include <set>
using namespace std;
typedef long long ll;
ll a[262220];
set<ll>b;
void dfs(ll x,ll y,ll cnt)
{
if(x==0&&y==0)
{
b.insert(cnt);
return;
}
if(x>0) dfs(x-1,y,cnt*10+4);
if(y>0) dfs(x,y-1,cnt*10+7);
}
int main()
{
int t;
b.insert(47);
b.insert(74);
for(int i=2;i<=9;i++)
{
dfs(i,i,0);
}
scanf("%d",&t);
ll n;
while(t--)
{
scanf("%lld",&n);
if(n>777777777444444444)
{
printf("44444444447777777777\n");
continue;
}
printf("%lld\n",*b.lower_bound(n));
}
return 0;
}
相关文章推荐
- 如何组织构建多文件 C 语言程序(二)
- 如何写好 C main 函数
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- Lua和C语言的交互详解
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- C语言编程中统计输入的行数以及单词个数的方法