51Nod 1010 只包含因子2 3 5的数 Label:None
第1行:一个数T,表示后面用作输入测试的数的数量。(1 <= T <= 10000)
第2 - T + 1行:每行1个数N(1 <= N <= 10^18)
共T行,每行1个数,输出>= n的最小的只包含因子2 3 5的数。
5
1
8
13
35
77
2
8
15
36
80
代码
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#define ll long long
#define INF 1500000000000000000
using namespace std; struct cmp{bool operator()(ll a,ll b){return a>b;}};
priority_queue<ll,vector<ll>,cmp> q;
map<ll,int> m; ll a[1000005],M,p; void init_(){
q.push(1);
while(q.top()<INF){
ll x=q.top();q.pop();
a[p++]=x;
if(!m.count(2*x)) {q.push(2*x);m[2*x]=1;}
if(!m.count(3*x)) {q.push(3*x);m[3*x]=1;}
if(!m.count(5*x)) {q.push(5*x);m[5*x]=1;}
} //cout<<p<<endl;
scanf("%d",&M);
} void work(){
while(M--){
ll x;
scanf("%lld",&x); printf("%lld\n",*lower_bound(a+1,a+p+1,x));
}
} int main(){
// freopen("01.in","r",stdin); init_();
work(); fclose(stdin);fclose(stdout);return 0;
}
做一个优先队列,用已经有的数生成更大的数
map去重,lower_bound二分加速
INF少打了一个0,不开心

时间还算可以吧,我觉得主要是询问的时间,因为 计数器菌 表示这样的数在数据范围内只有1w+
51Nod 1010 只包含因子2 3 5的数 Label:None的更多相关文章
- 51nod 1010 只包含因子2 3 5的数 二分答案
1010 只包含因子2 3 5的数 K的因子中只包含2 3 5.满足条件的前10个数是:2,3,4,5,6,8,9,10,12,15. 所有这样的K组成了一个序列S,现在给出一个数n,求S中 > ...
- 51nod 1010 只包含因子2 3 5的数 打表
只包含因子2 3 5的数 题目连接: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1010 Description K的 ...
- 51Nod 1010 只包含因子2 3 5的数
K的因子中只包含2 3 5.满足条件的前10个数是:2,3,4,5,6,8,9,10,12,15. 所有这样的K组成了一个序列S,现在给出一个数n,求S中 >= 给定数的最小的数. 例如:n = ...
- 51Nod 1010 只包含因子2 3 5的数(打表+二分)
K的因子中只包含2 3 5.满足条件的前10个数是:2,3,4,5,6,8,9,10,12,15. 所有这样的K组成了一个序列S,现在给出一个数n,求S中 >= 给定数的最小的数. 例如:n = ...
- 51nod 1010 只包含因子2 3 5的数 && poj - 1338 Ugly Numbers(打表)
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1010 http://poj.org/problem?id=1338 首先 ...
- 51Nod 1010 只包含因子2 3 5的数 | 预处理+二分
Input示例 5 1 8 13 35 77 Output示例 2 8 15 36 80 分析:将所有的只含有2 3 5因子的数打一个表保存在一个数组里,然后二分查找第一个>=数组里的数,输出 ...
- 1007 正整数分组 1010 只包含因子2 3 5的数 1014 X^2 Mod P 1024 矩阵中不重复的元素 1031 骨牌覆盖
1007 正整数分组 将一堆正整数分为2组,要求2组的和相差最小. 例如:1 2 3 4 5,将1 2 4分为1组,3 5分为1组,两组和相差1,是所有方案中相差最少的. Input 第1行:一个 ...
- 只包含因子2 3 5的数(51NOD 1010)
K的因子中只包含2 3 5.满足条件的前10个数是:2,3,4,5,6,8,9,10,12,15. 所有这样的K组成了一个序列S,现在给出一个数n,求S中 >= 给定数的最小的数. 例如:n = ...
- 把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
// ConsoleApplication1.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> ...
随机推荐
- 推荐一些国内的Jquery CDN免费服务
Jquery是个非常流行的JS前端框架,在很多网站都能看到它的身影.很多网站都喜欢采用一些Jquery CDN加速服务,这样网站加载jquery会更快.之前火端网络的一些网站都是使用Google的jq ...
- Virtualbox 上调整 Mac OS 分辨率 最简单方法
Mac OS 分辨率:VBoxManage setextradata "Mac OS X 10.10" VBoxInternal2/EfiGopMode 3 ----代 ...
- linux 下C++查询mysql数据库
上一节我们看了怎么使用mysql提供的API来连接mysql数据库,现在来看看怎么执行一条简单的查询语句,并且把查询的结果显示出来. 准备工作:首先新建了一个数据库inote,在这个数据库下面新建了一 ...
- c#在字符串中计算加减乘除...
DataTable dt = new DataTable(); Response.Write(dt.Compute("1+1*5", ...
- mysql使用load导入csv文件所遇到的问题及解决方法
使用navicat的客户端插入csv的数据文件,有一种非常简单的方式,即使用导入向导,直接根据数据匹配即可. 使用load的方式. 由于本项目中插入数据表量大而且格式统一,故首先使用创建字段creat ...
- CSS布局 ——从display,position, float属性谈起
页面布局,或者是在页面上做些小效果的时候经常会用到 display,position和float 属性,如果对它们不是很了解的话,很容易出现一些莫名其妙的效果,痛定思痛读了<CSS Master ...
- svn检出项目
第一步: 第二步: 第三步: 第四步: 第五步: 填写项目名称 第六步: 选择路径 第七步:
- 在VisualStudio 编辑器文本替换中使用正则表达式
替换时使用正则表达式,其优点在于可以通过正则分组捕获,并在替换字符串中使用. 在VS2012之前的版本中,捕获内容用{}包含,引用时,使用 \1 形式: 在VS2012及以后版本中,捕获内容符合正则表 ...
- Mosquitto搭建Android推送服务(二)Mosquitto简介及搭建
文章钢要: 1.了解Mosquitto服务器 2.在Liunx中搭建Mosquitto服务器 3.设置Mosquitto集群 一.Mosquitto简介 一款实现了消息推送协议 MQTT v3.1 的 ...
- 如何封装JS ----》JS设计模式《------ 封装与信息隐藏
1. 封装与 信息隐藏之间的关系 实质是同一个概念的两种表达,信息隐藏式目的,二封装是借以达到目的的技术方法.封装是对象内部的数据表现形式和实现细节,要想访问封装过额对象中的数据,只有使用自己定义的操 ...