Description

丑数是指素因子都在集合{2,3,5,7}内的整数,第一个丑数是1。
现在输入n(n<=4000),输出第n个丑数。

Input

输入文件仅一行为一个整数n。

Output

输出文件仅一行为一个整数,表示第n个丑数。

Sample Input

5

Sample Output

5

这道题窝先打的STL优先队列 然后全WA。。。。

看了前辈的打表程序 对拍了一下 发现很有问题(废话

后来发现问题出在 丑数集合中不能有重复数字

一个相同的数可能被视作多个数

于是乎就短暂的考虑了。。。。

当开始试验的时候憨憨癌发作 以为数组只用开4000就OK

后来发现事情没那么简单。。。。。

这个桶应该开到第4000个丑数的值那么大

前辈的打表程序发现是2亿多。。。。。。

(MLE的芳香!

于是飞快放弃了。。。。

最后选用的是C++自带的超强的set函数

先上网自学了一波 知道了set函数具有去重+排序的美妙功能

非常符合这道题的要求啊!

于是自学set过后A了这道水题。。。。。。

果然还是窝太菜了QAQ

set效率很高的 不愧是C++

自学set的文章网址

然后就是0msAC代码:

#include <iostream>
#include <set> #define maxn 1005
using namespace std; set <int> a; int main()
{
a.insert(1);
//先插入堆顶操作元素
int n;
cin>>n;
for(int i=2;i<=n;i++)
//因为初始化堆顶视为一次操作 所以从i=2开始
{
int num=*a.begin();
//先定义一个变量储存当前堆顶
//其实和指针没关系的。。。。
a.insert(num*2);
//分别插入操作数 set会自行排序维护根堆
a.insert(num*3);
a.insert(num*5);
a.insert(num*7);
a.erase(a.begin());
//再将堆顶弹出
}
cout<<*a.begin()<<endl;
//最后的堆顶就是答案啦~~~
return 0;
}

有什么疑问可以问窝 但是窝很菜的。。。

CSP普及才Au宁敢问吗


2020年2月9日10:19更新

在听了did讲课过后 窝知道了这道题其实可以不用set 而且没必要

毕竟这就是一道堆练习嘛

窝再梳理了一下我的心路历程 发现实际上窝离正常确方法就差那么一丢丢

这道题的确要考虑到去重

但没有必要用set去重 因为正如did所说的一样:

“宁现在用了set,以后不能用set的时候宁怎么办?”

所以可以直接在堆的代码里加入少量的盐去重算法以达到同样效果

代码:

#include <iostream>
#include <queue> #define maxn 1005
using namespace std; priority_queue <int,vector<int>,greater<int> > a;
//定义一个小根堆
//这里使用的食材(bushi)工具是STL
//各位大佬可以自己手写堆 勿喷蒟蒻 int main()
{
a.push(1);
int n;
cin>>n;
for(int i=2;i<=n;i++)
{
int num=a.top();
//拿出堆顶元素 即操作数
a.push(num*2);a.push(num*3);
//放入其他丑数
a.push(num*5);a.push(num*7);
while(a.top()==num) a.pop();
//去重 只要相同就pop
}
cout<<a.top()<<endl;
//最后的堆顶就是第n个丑数啦~~~
return 0;
}

提交过后性能分析

Time Memory Length
0ms 1863KB 0.39KB
set 0ms 1997KB 0.34KB

综上分析 堆更优

堆的好处:易懂 易想 耗时较少

set的好处:好写 方便 码量较少


求点赞QAQ不容易啊

常见疑问一:
OI上可以用set吗?
回答:
应该可以 但我没用过(
常见疑问二:
你BB太多 可以举报吗?
回答:
QAQ!!!不看就行啦!!!

BSOJ 1562 【堆练习】丑数3576的更多相关文章

  1. 剑指 Offer 49. 丑数 + 小根堆 + 动态规划

    剑指 Offer 49. 丑数 Offer_49 题目详情 解法一:小根堆+哈希表/HashSet 根据丑数的定义,如果a是丑数,那么a2, a3以及a*5都是丑数 可以使用小根堆存储按照从小到大排序 ...

  2. AC日记——丑数 codevs 1246

    1246 丑数 USACO  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Description 对于一给定的素 ...

  3. Humble Numbers(丑数) 超详解!

    给定一个素数集合 S = { p[1],p[2],...,p[k] },大于 1 且素因子都属于 S 的数我们成为丑数(Humble Numbers or Ugly Numbers),记第 n 大的丑 ...

  4. 丑数(USACO)

    这个题是一个动态规划加优化的经典题 1246 丑数 USACO  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解 题目描述 Description 对 ...

  5. Luogu2723丑数Humble Numbers【归并排序】

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

  6. 插入排序的优化非希尔【不靠谱地讲可以优化到O(nlogn)】 USACO 丑数

    首先我们先介绍一下普通的插排,就是我们现在一般写的那种,效率是O(n^2)的. 普通的插排基于的思想就是找位置,然后插入进去,其他在它后面的元素全部后移,下面是普通插排的代码: #include< ...

  7. 力扣:丑数II和数组中前K大的元素

    数组中的第K个元素 在未排序的数组中找到第 k 个最大的元素.请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素. 示例 1: 输入: [3,2,1,5,6,4] 和 k ...

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

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

  9. Leetocde的两道丑数题目:264. 丑数 II➕313. 超级丑数

    Q: A: 用变量记录已经✖2.✖3.✖5的元素下标i2.i3.i5.表示截止到i2的元素都已经乘过2(结果添加到序列尾部的意思),i3.i5同理.这样每次可以循环可以O(1)时间找到下一个最小的丑数 ...

随机推荐

  1. 从零搭建一个IdentityServer——目录(更新中...)

    从零搭建一个IdentityServer--项目搭建 从零搭建一个IdentityServer--集成Asp.net core Identity 从零搭建一个IdentityServer--初识Ope ...

  2. Yacc使用优先级

    Yacc使用优先级 本示例是龙书4.9.2的示例,见图4-59. 和前一章一样,新建xUnit项目,用F#语言.起个名C4F59安装NuGet包: Install-Package FSharpComp ...

  3. 一篇文章图文并茂地带你轻松学完 JavaScript 事件循环机制(event loop)

    JavaScript 事件循环机制 (event loop) 本篇文章已经默认你有了基础的 ES6 和 javascript语法 知识. 本篇文章比较细致,如果已经对同步异步,单线程等概念比较熟悉的读 ...

  4. 用Python修改本机适配器信息

    主要参考来自[用Python干实事(一)自动修改Windows的IP.网关和DNS设置]. 使用_winreg模块来操作注册表实现相关信息的修改,它是python的内置模块.也可以通过Win32 Ex ...

  5. Codeforces Round #646 (Div. 2) C. Game On Leaves (贪心,博弈)

    题意:给你一棵树,每次可以去掉叶节点的一条边,Ayush先开始,每回合轮流来,问谁可以第一个把\(x\)点去掉. 题解:首先如果\(x\)的入度为\(1\),就可以直接拿掉,还需要特判一下入度为\(0 ...

  6. 1009E Intercity Travelling 【数学期望】

    题目:戳这里 题意:从0走到n,难度分别为a1~an,可以在任何地方休息,每次休息难度将重置为a1开始.求总难度的数学期望. 解题思路: 跟这题很像,利用期望的可加性,我们分析每个位置的状态,不管怎么 ...

  7. bochs 调试 com 文件 magicbreak

    参考 https://blog.csdn.net/housansan/article/details/41833581 在网上看到2中解决此问题的方法:1.使用dos下的debug32工具单步跟踪pm ...

  8. HEXO添加置顶功能

    使用库:参考 http://wangwlj.com/2018/01/09/blog_pin_post/ 目前已经有修改后支持置顶的仓库,可以直接用以下命令安装.(cmd 到博客根目录,nmp运行) $ ...

  9. codeforces 870C

    C. Maximum splitting time limit per test 2 seconds memory limit per test 256 megabytes input standar ...

  10. CSS字体大小: em与px、pt、百分比之间的对比

      CSS样式最混乱的一个方面是应用程序中文本扩展的font-size属性.在CSS中,你可以用四个不同的单位度量来显示在web浏览器中的文本大小.这四个单位哪一种最适合Web? 这个问题引起了广泛的 ...