博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
51nod 1010 只包含因子2 3 5的数 二分答案
阅读量:5960 次
发布时间:2019-06-19

本文共 1412 字,大约阅读时间需要 4 分钟。

K的因子中只包含2 3 5。满足条件的前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的最小的只包含因子2 3 5的数。
Input示例
518133577
Output示例
28153680
这道题并不算什么难题吧,但是可以熟悉下二分的各种奇淫做法,stl里面有三种二分还是很强大的

函数lower_bound()在first和last中的前闭后开区间进行二分查找,返回大于或等于val的第一个元素位置。如果所有元素都小于val,则返回last的位置

举例如下:

一个数组number序列为:4,10,11,30,69,70,96,100.设要插入数字3,9,111.pos为要插入的位置的下标

pos = lower_bound( number, number + 8, 3) - number,pos = 0.即number数组的下标为0的位置。

pos = lower_bound( number, number + 8, 9) - number, pos = 1,即number数组的下标为1的位置(即10所在的位置)。

pos = lower_bound( number, number + 8, 111) - number, pos = 8,即number数组的下标为8的位置(但下标上限为7,所以返回最后一个元素的下一个元素)。

所以,要记住:函数lower_bound()在first和last中的前闭后开区间进行二分查找,返回大于或等于val的第一个元素位置。如果所有元素都小于val,则返回last的位置,且last的位置是越界的!!~

返回查找元素的第一个可安插位置,也就是“元素值>=查找值”的第一个元素的位置 by

10^18这个数据量还是很大的,不过2^10都1024了,所以对这些数枚举并不会有什么错错,但是关键是要对这些数字进行查找,就是找这些数第一个大于n的就可以了,这就是大致思路

#include
using namespace std;typedef long long LL;const LL INF = 1e18+1000;const int MAXN = 1e6;LL a[MAXN];int cnt;void Init(){ cnt = 0; for(LL i=1; i
>t; while(t--) { LL n; scanf("%lld",&n); printf("%lld\n",a[lower_bound(a+1,a+cnt+1,n)-a]); } return 0;}

 

 

 
 

转载于:https://www.cnblogs.com/BobHuang/p/6942258.html

你可能感兴趣的文章
版本控制工具——Git常用操作(上)
查看>>
5分钟构建无服务图片鉴黄web应用(基于FunctionGraph)
查看>>
神经科学研究所开发AI动作捕捉工具 以高精准度追踪动物动作
查看>>
vue组件之Tabs标签页
查看>>
ES6之变量的解构赋值
查看>>
用localStorage存储购物车数据实战
查看>>
“一带一路”为会展业带来新机遇
查看>>
Spring详解
查看>>
Go defer 知识点
查看>>
【本人秃顶程序员】如何在代码中应用设计模式
查看>>
当你凝视黑洞的时候,它已经被玩坏了
查看>>
fluent python 读书笔记 2--Python的序列类型2
查看>>
依赖冲突时的解决方法
查看>>
学习笔记5
查看>>
富人为什么越富,穷人为什么越穷
查看>>
电子商务java b2b b2c o2o平台
查看>>
(五)java spring cloud版b2b2c社交电商spring cloud分布式微服务-路由网关(zuul)
查看>>
零基础学小程序007---小程序获取用户openid
查看>>
两年摸爬滚打 Spring Boot,总结了这 16 条最佳实践
查看>>
Laravel 5 5 使用 Jwt Auth 实现 API 用户认证以及无痛刷新访问令牌
查看>>