51nod 1010 只包含因子2 3 5的数 打表二分
2016-09-20 18:39
351 查看
1010只包含因子235的数
基准时间限制:1秒空间限制:131072KB分值:10难度:2级算法题
K的因子中只包含235。满足条件的前10个数是:2,3,4,5,6,8,9,10,12,15。
所有这样的K组成了一个序列S,现在给出一个数n,求S中>=给定数的最小的数。
例如:n=13,S中>=13的最小的数是15,所以输出15。
Input
Output
Input示例
Output示例
基准时间限制:1秒空间限制:131072KB分值:10难度:2级算法题
K的因子中只包含235。满足条件的前10个数是:2,3,4,5,6,8,9,10,12,15。
所有这样的K组成了一个序列S,现在给出一个数n,求S中>=给定数的最小的数。
例如:n=13,S中>=13的最小的数是15,所以输出15。
Input
第1行:一个数T,表示后面用作输入测试的数的数量。(1<=T<=10000) 第2-T+1行:每行1个数N(1<=N<=10^18)
Output
共T行,每行1个数,输出>=n的最小的只包含因子235的数。
Input示例
5 1 8 13 35 77
Output示例
2 8 15 36 80 思路:dfs打表。。。然后排序,二分出答案
#include<iostream> #include<cstdio> #include<algorithm> usingnamespacestd; typedeflonglongintll; constllINF=1e18+1e9; lla[100005]; intcnt=0; intx[]={2,3,5}; voiddfs(intpos,llnum){ if(pos==3){ a[cnt++]=num; return; } dfs(pos+1,num); for(inti=1;i<=64;i++){ if(num*x[pos]>INF)break; dfs(pos+1,num*=x[pos]); } } intmain() { dfs(0,1); sort(a,a+cnt); intt; scanf("%d",&t); while(t--){ lly; scanf("%I64d",&y); intans=lower_bound(a,a+cnt,y)-a; if(ans==0)ans++; printf("%I64d\n",a[ans]); } return0; }
相关文章推荐
- Yocto 包管理 apt-get
- 反应器(Reactor)模式
- 悲观锁和乐观锁的使用
- linux 下查看文件修改时间 等
- cxf实现的ws_client(带安全验证)
- java 通过反射获取泛型的类型
- Django中的分页
- svn 常用命令 status/log/commit/up/add
- bugreport
- 实验二:跨交换机实现VLAN
- 反射
- 【HDU 1133】 Buy the Ticket (卡特兰数)
- iOS 10、Xcode 8 遇到部分问题解决记录
- sujection重构
- x264 亮度信号8x8帧内预测模式
- Android--Dialog
- sqlite中的锁及概念误区
- matlab 线性规划函数-linprog
- subjection重构
- How JavaScript Timers Work