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. Angela Merkel poised for record poll win and historic third term

    Her success remains a mystery for many, but victory could see the German chancellor beat Thatcher's ...

  2. javah的使用

    2.我们要开始写javah的命令,以便生成对应的C语言头文件 D:\我的文档\workspace\PrepareForExam\src>javah -classpath D:\我的文档\work ...

  3. 49-Group Anagrams-(Medium) 题解

    1.题目 Given an array of strings, group anagrams together. For example, given: ["eat", " ...

  4. Linux系统(四)负载均衡LVS集群之NAT模式

    序言 提到LVS,就从章文嵩博士开始吧,反正也不知道如何下笔来写这一篇.章大博士,读博时候创建这个lvs软件项目,但是他提倡开源精神,在用户的建议和反馈中,这个花了他两周时间开发的开源软件不断得到改建 ...

  5. 关于echarts的一些基本使用demo

    最近发现一个很好用的一个前端控件echarts,效果非常不错,兼容ie8+以上等主流浏览器.可以使用它制作报表,地图示意图等,可用其实现一系列强大的功能. 其基于html5 Canvas,是一个纯Ja ...

  6. javascript 常用api

    常用API合集 来源于:https://www.kancloud.cn/dennis/tgjavascript/241852 一.节点 1.1 节点属性 Node.nodeName //返回节点名称, ...

  7. bash之重定向

                                                                          标准输入 stdin:代码为0,使用< 或 <& ...

  8. 五金配件行业ERP解决方案

    五金行业信息化需求分析 “国内竞争国际化,国际竞争国内化”将是近几年我国五金行业发展的特点,中国作为全球五金制造中心的地位将进一步稳固.随着中国融入全球经济环境进程的加快以及经济实力的快速崛起,中国已 ...

  9. zBase --轻量级DOM操作库

    项目地址:ZengTianShengZ-github zBase-1.2.0 --v3 修复部分bug,添加AMD规范测试 zBase-1.1.0 --v2 对 v1 版本做了升级,优化DOM查找,简 ...

  10. 【LeetCode】Binary Tree Level Order Traversal 【BFS】

    Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...