HDU 5676 ztr loves lucky numbers
2017-09-08 19:09
274 查看
ztr loves lucky numbers
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 1992 Accepted Submission(s): 776
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题意: 幸运数是只含有4和7的数字,最幸运的数字是只含有4和7的数字并且4的数量和7的数量相等。给你一个数,让你求比它大的最小的幸运数。思路: 因为只含有最幸运数只含有4和7并且4和7的数量相等,所以就算最大为10的18次方,总共的最幸运数也是可以数的过来的,所以,可以用打表的方式打出所有的幸运数,然后再寻找就可以。注意特判情况。
代码1:
#include<stdio.h> #include<string.h> #include<iostream> #include<algorithm> using namespace std; long long a[500000]; int cnt; void dfs(int left,int right,long long num) { if(left==0&&right==0) { a[++cnt]=num; return ; } if(left>0) { dfs(left-1,right,num*10+4); } if(right>0) { dfs(left,right-1,num*10+7); } } int main() { int i,j; long long x; cnt=0; for(i=2;i<=18;i+=2) { dfs(i/2,i/2,0); } //printf("%d\n",cnt); /*for(i=1;i<=100;i++) { printf("%lld\n",a[i]); }*/ sort(a+1,a+cnt+1); int n; scanf("%d",&n); while(n--) { scanf("%lld",&x); if(x>777777777444444444){ cout<<"44444444447777777777"<<endl; continue; } for(i=1;i<=cnt;i++) { if(a[i]>=x) { x=a[i]; break; } } printf("%lld\n",x); } return 0; }
代码2: (用了 二分查找 )
#include<stdio.h> #include<string.h> #include<iostream> #include<algorithm> using namespace std; long long a[500000]; int cnt; void dfs(int left,int right,long long num) { if(left==0&&right==0) { a[++cnt]=num; return ; } if(left>0) { dfs(left-1,right,num*10+4); } if(right>0) { dfs(left,right-1,num*10+7); } } int main() { int i,j; long long x; cnt=0; for(i=2;i<=18;i+=2) { dfs(i/2,i/2,0); } //printf("%d\n",cnt); /*for(i=1;i<=100;i++) { printf("%lld\n",a[i]); }*/ sort(a+1,a+cnt+1); int n; scanf("%d",&n); long long ans; while(n--) { scanf("%lld",&x); if(x>777777777444444444){ cout<<"44444444447777777777"<<endl; continue; } int left,right,mid; left=1; right=cnt; while(left<=right) { mid=(left+right)>>1; if(a[mid]>=x) { ans=a[mid]; right=mid-1; } else { left=mid+1; } } printf("%lld\n",ans); } return 0; }
相关文章推荐
- Hdu 5676 ztr loves lucky numbers
- HDU 5676 ztr loves lucky numbers【DFS】
- HDU 5676 ztr loves lucky numbers(dfs+离线)——BestCoder Round #82(div.1 div.2)
- HDU 5676 ztr loves lucky numbers【DFS】
- hdu 5676 ztr loves lucky numbers(BC——暴力打表+二分查找)
- hdu 5676 ztr loves lucky numbers(STL大法好)
- hdu 5676 ztr loves lucky numbers
- hdu 5676 ztr loves lucky numbers【dfs+剪枝】
- hdu 5676-ztr loves lucky numbers
- hdu_5676_ztr loves lucky numbers
- HDU 5676 ztr loves lucky numbers
- hdu 5676 ztr loves lucky numbers
- hdu_5676_ztr loves lucky numbers
- hdu 5676 ztr loves lucky numbers 打表+二分
- HDU - 5676 ztr loves lucky numbers(全排列)
- HDU 5676 ztr loves lucky numbers
- hdu 5676 ztr loves lucky numbers
- hdu 5676 ztr loves lucky numbers(dfs+离线)
- hdu 5676 ztr loves lucky numbers(STL大法好)
- HDU 5676 ztr loves lucky numbers