ztr loves lucky numbers--hdu5676(DFS)
2016-05-03 15:54
99 查看
http://acm.hdu.edu.cn/showproblem.php?pid=5676
题目大意: 给你一个数 让你找比这数大并且只含4和7 并且4和7的个数一样
枚举从0到10的18次方之间的所有的可能的数 在用二分搜索
因为20位超过longlong 所以特判一下
题目大意: 给你一个数 让你找比这数大并且只含4和7 并且4和7的个数一样
枚举从0到10的18次方之间的所有的可能的数 在用二分搜索
因为20位超过longlong 所以特判一下
#include<stdio.h> #include<math.h> #include<algorithm> #include<iostream> #include<string.h> #include<stdlib.h> #define INF 0x3f3f3f3f3 using namespace std; long long a[70000]; long long int m; long long int cont=0; void DFS(int x,int y,long long num) { if(x==0 && y==0) { a[++cont]=num; return; } if(x>0) DFS(x-1,y,num*10+4); if(y>0) DFS(x,y-1,num*10+7); } void Find() { a[1]=47; a[2]=74; cont=2; for(int i=4;i<=18;i=i+2) { DFS(i/2,i/2,0); } } int main() { int T; Find(); scanf("%d",&T); while(T--) { scanf("%lld",&m); if(m==0) { printf("47\n"); continue; } if(m>777777777444444444) { printf("44444444447777777777\n"); continue; } int l,r; l=1;r=cont; while(l<=r) { int mid=(l+r)/2; if(a[mid]>m) { l=l; r=mid-1; } else if(a[mid]<m) { l=mid+1; r=r; } else if(a[mid]==m) { l=mid; break; } } printf("%lld\n",a[l]); } return 0; }
相关文章推荐
- VC++6.0在win8.1系统下的兼容性破解
- 关于毫秒数转date类型的细节问题
- Android WebView使用基础
- 如何升级nodejs版本
- C语言文件读写操作中缓冲区问题和setbuf函数详解
- hiho第九十二周数论一·Miller-Rabin质数测试
- oracle创建计划任务
- Web程序员最常用的11款PHP框架
- 猜数字(C语言版)
- 停博通知
- BLE4.0 连接参数说明和使用
- Jetty 的工作原理以及与 Tomcat 的比较
- 第8条 对于所有对象都通用的方法——覆盖equals时请遵守通用约定
- vm10虚拟机安装Mac OS X10.10教程
- JMS基础概念
- Android与网页交互
- mac_intellij_idea_快捷键
- 不用root权限也能运行Docker——细数Docker 1.10的新功能
- PAT B 1011
- android技术要点梳理