Luogu2723丑数Humble Numbers

题目背景

对于一给定的素数集合 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

这是一道经典的归并排序题,100路归并,思路很简单,寻找最小值加入答案队列,然后把所有最小值的指针都前移(可能有重复的),直到答案队列的长度达到n,输出即可。

话说好像还有用堆的,我打了一个,结果最后一个点T了,估计是哈希函数没选好,开O3都没有(代码附下)。

 ///一百路归并
 #include<cstdio>
 #include<iostream>
 using namespace std;
 ],q[];
 ];
 int main()
 {
     ;
     long long x;
     scanf("%d%d",&k,&n);
     ;i<=k;i++)
         scanf("%lld",&d[i]);
     q[]=;
     while(size<n)
     {
         x=1e18;
         ;i<=k;i++) x=min(x,q[p[i]]*d[i]);
         q[++size]=x;
         ;i<=k;i++) if(x==q[p[i]]*d[i]) p[i]++;
     }
     printf("%lld",q[size]);
     ;
 }
 #pragma GCC optimize(3)
 #include<cstdio>
 #include<iostream>
 #include<cstring>
 using namespace std;
 ;
 typedef long long LL;
 int size,s;
 LL d[],ugly[];
 LL hashi[mod];
 inline void hash_del(LL x)
 {
     int y=x%mod;
     )%mod;
     hashi[y]=;
 }
 inline bool hash_push(LL x)
 {
     int y=x%mod;
     &&hashi[y]!=x) y=(y+)%mod;
     )
     {
         hashi[y]=x;
         ;
     }
     ;
 }
 inline void heap_push(LL x){
     size++;
     ugly[size]=x;
     int l=size;
     ]&&l>){
         swap(ugly[l],ugly[l/]);
         l=l/;
     }
 }
 inline void heap_down(){
     int l;
     l=;
     ]&&l*<=size)||(ugly[l]>ugly[l*+]&&l*+<=size)){
         +]<ugly[l*]&&l*+<=size){
             swap(ugly[l],ugly[l*+]);
             l=l*+;
         } else {
             swap(ugly[l],ugly[l*]);
             l=l*;
         }
     }
 }
 int main(){
     int n,k;
     scanf("%d%d",&n,&k);
     size=;
     s=;
     ;i<=n;i++){
         scanf("%lld",&d[i]);
         heap_push(d[i]);
         hash_push(d[i]);
     }
     LL a,w;
     ;j<=k;j++){
         a=ugly[];
         hash_del(a);
         ugly[]=ugly[size];
         size--;
         heap_down();
         ;i<=n;i++) if(hash_push(a*d[i])) heap_push(a*d[i]);
         if(size>k) size=k;
     }
     printf("%lld",a);
     ;
 }

Luogu2723丑数Humble Numbers【归并排序】的更多相关文章

  1. 洛谷P2723 丑数 Humble Numbers

    P2723 丑数 Humble Numbers 52通过 138提交 题目提供者该用户不存在 标签USACO 难度普及/提高- 提交  讨论  题解 最新讨论 暂时没有讨论 题目背景 对于一给定的素数 ...

  2. 洛谷P2723 丑数 Humble Numbers [2017年 6月计划 数论07]

    P2723 丑数 Humble Numbers 题目背景 对于一给定的素数集合 S = {p1, p2, ..., pK},考虑一个正整数集合,该集合中任一元素的质因数全部属于S.这个正整数集合包括, ...

  3. 【转载】丑数humble numbers

    转载地址:http://blog.csdn.net/qwerty_xk/article/details/12749961 题:只有2 3 5 这三个因子的数,求第1500个   设1为第一个丑数,求第 ...

  4. P2723 丑数 Humble Numbers

    题意:给你k个质数,定义丑数集合为k个质数随机(1--k)个相乘得到的数 求第n小的丑数 暴力...貌似不太可行,(把所有大量丑数求出来,sort   QAQ) 可以想到,对于第i个丑数f[i],它一 ...

  5. 丑数(Ugly Numbers, UVa 136)

    丑数(Ugly Numbers, UVa 136) 题目描述 我们把只包含因子2.3和5的数称作丑数(Ugly Number).求按从小到大的顺序的第1500个丑数.例如6.8都是丑数,但14不是,因 ...

  6. 37.寻找丑数[Ugly numbers]

    [题目] 我们把只包含质因子2.3和5的数称作丑数(Ugly Number),例如:2,3,4,5,6,8,9,10,12,15,等,习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第1500个丑 ...

  7. luogu2723 丑数

    提供一种单调队列做法(非正解) 显然每一个丑数能够由一个质数乘以另一个丑数得到 所以我们开k个单调递增队列,每次从这些队列顶部找到一个最小的元素把他捞出来,然后枚举所有质数,用这个元素乘以质数,放入相 ...

  8. 【题解】丑数Humble Numbers-C++

    题目描述Description对于一给定的素数集合 S = {p1, p2, …, pK},如果一个数字,当我们对其做完质因子分解后,其质因子全是来自我们给定的素数集合,则认为这个数字是个丑数.注意: ...

  9. C语言程序设计100例之(14):丑数

    例14   丑数 问题描述 丑数是其质因子只可能是2,3或5的数.前10个丑数分别为1, 2, 3, 4, 5, 6, 8, 9, 10, 12.输入一个正整数n,求第n个丑数. 输入格式 每行为一个 ...

随机推荐

  1. ASP.NET使用WebApi接口实现与Android客户端的交互(图片或字符串的接收与回传)

    最近在使用WebApi   做下记录 //此接口实现接收Android客户端上传的JSON格式的信息,并返回"nihao"字符串 [Route("ReceiveData& ...

  2. Web前端浏览器兼容问题

    所谓的浏览器兼容性问题,是指因为不同的浏览器对同一段代码有不同的解析,造成页面显示效果不统一的情况.在大多数情况下,我们的需求是,无论用户用什么浏览器来查看我们的网站或者登陆我们的系统,都应该是统一的 ...

  3. Python脚本收集腾讯云CDN日志,并入ELK日志分析

    负责搭建公司日志分析,一直想把CDN日志也放入到日志分析,前些日志终于达成所愿,现在贴出具体做法: 1.收集日志 腾讯云CDN日志一般一小时刷新一次,也就是说当前只能下载一小时之前的日志数据,但据本人 ...

  4. Kettle 5.0源码编译

    下载源码请参考上一篇博文Kettle4.4.2源码分析 Kettle 5.0以前的库文件通过ant管理,5.0+的库文件通过ant+ivy管理.Eclipse一般都是安装ant插件,不安装ivy插件, ...

  5. Android -- RecyclerView实现顶部吸附效果

    1,先来看一下今天实现的效果: 2,这次的效果是使用ItemDecoration来实践的,来看一看我们的实现吧 第一步:首先添加依赖,由于我们这些数据是请求网络的,所以一下我们添加网络框架依赖.Rec ...

  6. 微信小程序怎样提高应用速度小技巧

    作者:vicyao, 腾讯web前端开发 高级工程师商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处. 原文链接:http://wetest.qq.com/lab/view/294.htm ...

  7. Scrapy 初体验

    开发笔记 Scrapy 初体验 scrapy startproject project_name 创建工程 scrapy genspider -t basic spider_name website. ...

  8. java算法 蓝桥杯(题+答案) 压缩变换

    10.压缩变换  (程序设计) 小明最近在研究压缩算法.他知道,压缩的时候如果能够使得数值很小,就能通过熵编码得到较高的压缩比.然而,要使数值很小是一个挑战. 最近,小明需要压缩一些正整数的序列,这些 ...

  9. android sdk tools 一览

    ANDROID SDK ADKROID SDK的工具划分为两部分,一部分是SDK tools,与平台无关,另一部分是Platform tools支持最新的安卓平台   SDK tools有 SDK m ...

  10. Python全栈开发——Linux命令学习

    Linux -- 一切皆文件 pwd: 查看当前所在目录 '/' :根目录 cd : 切换目录   eg.cd /    切换到根目录 ls:查看当前根目录下有几块盘.几个文件 ls -l:查看详细信 ...