洛谷P2723 丑数 Humble Numbers
P2723 丑数 Humble Numbers
- 52通过
- 138提交
- 题目提供者该用户不存在
- 标签USACO
- 难度普及/提高-
提交 讨论 题解
最新讨论
- 暂时没有讨论
题目背景
对于一给定的素数集合 S = {p1, p2, ..., pK},考虑一个正整数集合,该集合中任一元素的质因数全部属于S。这个正整数集合包括,p1、p1*p2、p1*p1、p1*p2*p3...(还有其它)。该集合被称为S集合的“丑数集合”。注意:我们认为1不是一个丑数。
题目描述
你的工作是对于输入的集合S去寻找“丑数集合”中的第N个“丑数”。所有答案可以用longint(32位整数)存储。
补充:丑数集合中每个数从小到大排列,每个丑数都是素数集合中的数的乘积,第N个“丑数”就是在能由素数集合中的数相乘得来的(包括它本身)第n小的数。
输入输出格式
输入格式:
第 1 行: 二个被空格分开的整数:K 和 N , 1<= K<=100 , 1<= N<=100,000.
第 2 行: K 个被空格分开的整数:集合S的元素
输出格式:
单独的一行,输出对于输入的S的第N个丑数。
输入输出样例
4 19
2 3 5 7
27
说明
题目翻译来自NOCOW。
USACO Training Section 3.1
分析:一开始的思路是先把很多丑数求出来,然后排个序,输出第n个,但是由于n太大,而且没有范围,所以不行.
优化一下,求出了第i-1个丑数,把所有可能的第i个丑数求出来,放到优先队列中,然后弹出最小的,这样的话要涉及到判重,TLE.
换一种思路,为了找第i个丑数,那么一定要比第i-1个丑数大,而且是最小的那一个,打个表,可以发现比i-1大的丑数一定是比i-1小的丑数乘某个质数得到的,鉴于质数的数量很少,而丑数的数量很大,我们枚举质数,然后枚举丑数,直到大于第i-1个丑数,记录一下,找到所有的符合条件的丑数以后,找出最小值(也可以在寻找的途中更新最小值),那么这个最小值就是第i个丑数,不会超时.
51分代码:
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <map>
#include <set>
#include <queue>
#include <functional> int k, n;
long long s[], ans[], tot;
set <long long> m;
priority_queue <long long, vector<long long>, greater<long long> >q; int main()
{
scanf("%d%d", &k, &n);
for (int i = ; i <= k; i++)
{
scanf("%lld", &s[i]);
q.push(s[i]);
}
//q.push(1);
while (tot <= n)
{
long long x = q.top();
q.pop();
//printf("%d\n", x);
if (!m.count(x))
{
ans[++tot] = x;
m.insert(x);
}
for (int i = ; i <= k; i++)
q.push(s[i] * x);
printf("%d\n", tot);
}
printf("%lld", ans[n]);
//while (1); return ;
}
AC代码:
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <map>
#include <set>
#include <queue>
#include <functional>
int pindex[];
int prime[];
int count;
long long hum[]; int main(void)
{
int k, n;
int i;
int min, m;
scanf("%d%d", &k, &n);
for (i = ; i <= k; i++) {
scanf("%d", &prime[i]);
}
hum[count++] = ;
memset(pindex, , sizeof(pindex));
while (count <= n) {
min = 0x7FFFFFFF;
for (i = ; i <= k; i++) {
while (prime[i] * hum[pindex[i]] <= hum[count - ]) {
pindex[i]++;
} if (prime[i] * hum[pindex[i]] < min)
min = prime[i] * hum[pindex[i]];
}
hum[count++] = min;
} printf("%lld\n", hum[n]);
return ;
}
洛谷P2723 丑数 Humble Numbers的更多相关文章
- 洛谷P2723 丑数 Humble Numbers [2017年 6月计划 数论07]
P2723 丑数 Humble Numbers 题目背景 对于一给定的素数集合 S = {p1, p2, ..., pK},考虑一个正整数集合,该集合中任一元素的质因数全部属于S.这个正整数集合包括, ...
- P2723 丑数 Humble Numbers
题意:给你k个质数,定义丑数集合为k个质数随机(1--k)个相乘得到的数 求第n小的丑数 暴力...貌似不太可行,(把所有大量丑数求出来,sort QAQ) 可以想到,对于第i个丑数f[i],它一 ...
- Luogu2723丑数Humble Numbers【归并排序】
Luogu2723丑数Humble Numbers 题目背景 对于一给定的素数集合 S = {p1, p2, ..., pK},考虑一个正整数集合,该集合中任一元素的质因数全部属于S.这个正整数集合包 ...
- 【转载】丑数humble numbers
转载地址:http://blog.csdn.net/qwerty_xk/article/details/12749961 题:只有2 3 5 这三个因子的数,求第1500个 设1为第一个丑数,求第 ...
- 洛谷P1102 A-B数对
洛谷P1102 A-B数对 https://www.luogu.org/problem/show?pid=1102 题目描述 出题是一件痛苦的事情! 题目看多了也有审美疲劳,于是我舍弃了大家所熟悉的A ...
- 丑数(Ugly Numbers, UVa 136)
丑数(Ugly Numbers, UVa 136) 题目描述 我们把只包含因子2.3和5的数称作丑数(Ugly Number).求按从小到大的顺序的第1500个丑数.例如6.8都是丑数,但14不是,因 ...
- 洛谷P1288 取数游戏II(博弈)
洛谷P1288 取数游戏II 先手必胜的条件需要满足如下中至少 \(1\) 条: 从初始位置向左走到第一个 \(0\) 的位置,经过边的数目为偶数(包含 \(0\) 这条边). 从初始位置向右走到第一 ...
- 洛谷 P1392 取数
题面 在做这道题前,先要会他的弱化版(实际一模一样,只是愚蠢的洛谷评测级别差了一档(睿智如姬无夜)) ----------------------------------弱化版------------ ...
- 洛谷——P2421 A-B数对(增强版)
题目背景 woshiren在洛谷刷题,感觉第一题:求两数的和(A+B Problem)太无聊了,于是增加了一题:A-B Problem,难倒了一群小朋友,哈哈. 题目描述 给出N 个从小到大排好序的整 ...
随机推荐
- mongodb的读写分离
转自:http://blog.csdn.net/sd0902/article/details/21538621 mongodb的读写分离使用Replica Sets来实现 对于replica set ...
- 【转】C#中判断扫描枪输入与键盘输入
提出问题:在收货系统中,常常要用到扫描枪扫描条码输入到TextBox,当条码无法扫描时,需要手工输入.如果是扫描枪输入时,我们将自动去判读条码,而手工输入时,最终需要加按回车键确认后判读条码.这时候我 ...
- TMS320C54x系列DSP的CPU与外设——第1章 绪论
第1章 绪论 TMS320C54x DSP是TMS320系列DSP产品中的定点数字信号处理器.C54x DSP满足了实时嵌入式应用的一些要求,例如通信方面的应用. C54x的中央处理单元(CPU)具有 ...
- java-Spring-1
1.@Autowired 自动寻找合适的类型注入,byType2.@Qualifier("userDAOImpl") 存在多个相同类型时,指定固定的一个bean,和上面1配合使用3 ...
- 一.OSI与TCP
一. TCP/IP的由来 OSI参考模型由来 计算机网络产生的最初阶段,每个计算机厂商都实现了自己的一套计算机网络体系结构;异构的网络之间无法进行通信.因此,ISO委员会推出了一种用于开放系统互联的网 ...
- 单选按钮选中js的处理
function FinancialinfosetController($scope, $http, $timeout, $location, $rootScope, $routeParams) { ...
- xpath提取目录下所有标签内的内容,递归 //text()
利用xpath来提取所有标签里面的内容,即使标签头不同 #-*-coding:utf8-*- import re import os from lxml import etree html = ''' ...
- HTML5列表、块、布局
一.列表 <ol> 无序列表 (每项前有.) <ul> 有序列表 (每项前有编号1,,2,3) <li> 列表项 <ul type=" ...
- 浅谈Dynamic 关键字系列之一:dynamic 就是Object(转)
C# 4.0提供了一个dynamic 关键字,那么什么是dynamic,究竟dynamic是如何工作的呢? 从最简单的示例开始: static void Main(string[] args) { d ...
- 【转】nginx服务器安装及配置文件详解
原文:http://seanlook.com/2015/05/17/nginx-install-and-config/ nginx服务器安装及配置文件详解 nginx在工作中已经有好几个环境在使用了, ...