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. Java Web(三) 会话机制,Cookie和Session详解

    很大一部分应该知道什么是会话机制,也能说的出几句,我也大概了解一点,但是学了之后几天不用,立马忘的一干二净,原因可能是没能好好理解这两种会话机制,所以会一直遗忘,一直重新回过头来学习它,今天好好把他总 ...

  2. CreateWindow的出错解决

    CreateWindow返回NULL,而且GetLastError()也返回0,代码如下: WNDCLASSEX wc = {  sizeof( WNDCLASSEX ), CS_CLASSDC, N ...

  3. jQuery中绑定事件bind() on() live() one()的异同

    jQuery中绑定事件的四种方法,他们可以同时绑定一个或多个事件 bind()-------------------------版本号小于3.0(在Jquery3.0中已经移除,相应unbind()也 ...

  4. Cocos2dx热更新遇到的那些坑

    1.Cocos2dx热更新因为文件名含有空格,ios下载失败bug修改 问题描述: 项目中偶尔遇到美术图片命名时不规范,导致图片名字含有空格.导致ios热更新时,遇到下载失败. 解决方案: 1.从新改 ...

  5. WEB标准了解

    今天看到朋友的简历有一项“了解WEB标准”,就特地了解了一下什么是WEB标准.现在就一项一项地解开自己的疑惑. 1.什么是WEB标准 WEB标准大部分由万维网组织(W3C)制定的WEB程序开发规范.W ...

  6. JavaWeb之DBUtils

    一.什么是DBUtils及作用 DBUtils是apache公司写的.DBUtils是java编程中的数据库操作实用工具,小巧简单实用. DBUtils封装了对JDBC的操作,简化了JDBC操作.可以 ...

  7. 搭建hibernate环境

    Hibernate概述什么是框架1 写程序,使用框架之后,帮我们实现一部分功能,使用框架好处,少写一部分代码实现功能 什么是hibernate框架(重点)1 hibernate框架应用在javaee三 ...

  8. 强化学习读书笔记 - 06~07 - 时序差分学习(Temporal-Difference Learning)

    强化学习读书笔记 - 06~07 - 时序差分学习(Temporal-Difference Learning) 学习笔记: Reinforcement Learning: An Introductio ...

  9. gitoschina使用入门

    1 下载git sudo apt-get install git 2 添加公钥:terminal:  ssh-keygen -t rsa -C "git.oschina.net" ...

  10. 取出关联数组的key值和values值

    取出关联数组的key值,可用 array_keys()取出; <?php $a=array("Volvo"=>"XC90","BMW&qu ...