BSOJ 1562 【堆练习】丑数3576
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++
然后就是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的更多相关文章
- 剑指 Offer 49. 丑数 + 小根堆 + 动态规划
剑指 Offer 49. 丑数 Offer_49 题目详情 解法一:小根堆+哈希表/HashSet 根据丑数的定义,如果a是丑数,那么a2, a3以及a*5都是丑数 可以使用小根堆存储按照从小到大排序 ...
- AC日记——丑数 codevs 1246
1246 丑数 USACO 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description 对于一给定的素 ...
- Humble Numbers(丑数) 超详解!
给定一个素数集合 S = { p[1],p[2],...,p[k] },大于 1 且素因子都属于 S 的数我们成为丑数(Humble Numbers or Ugly Numbers),记第 n 大的丑 ...
- 丑数(USACO)
这个题是一个动态规划加优化的经典题 1246 丑数 USACO 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description 对 ...
- Luogu2723丑数Humble Numbers【归并排序】
Luogu2723丑数Humble Numbers 题目背景 对于一给定的素数集合 S = {p1, p2, ..., pK},考虑一个正整数集合,该集合中任一元素的质因数全部属于S.这个正整数集合包 ...
- 插入排序的优化非希尔【不靠谱地讲可以优化到O(nlogn)】 USACO 丑数
首先我们先介绍一下普通的插排,就是我们现在一般写的那种,效率是O(n^2)的. 普通的插排基于的思想就是找位置,然后插入进去,其他在它后面的元素全部后移,下面是普通插排的代码: #include< ...
- 力扣:丑数II和数组中前K大的元素
数组中的第K个元素 在未排序的数组中找到第 k 个最大的元素.请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素. 示例 1: 输入: [3,2,1,5,6,4] 和 k ...
- 洛谷P2723 丑数 Humble Numbers [2017年 6月计划 数论07]
P2723 丑数 Humble Numbers 题目背景 对于一给定的素数集合 S = {p1, p2, ..., pK},考虑一个正整数集合,该集合中任一元素的质因数全部属于S.这个正整数集合包括, ...
- Leetocde的两道丑数题目:264. 丑数 II➕313. 超级丑数
Q: A: 用变量记录已经✖2.✖3.✖5的元素下标i2.i3.i5.表示截止到i2的元素都已经乘过2(结果添加到序列尾部的意思),i3.i5同理.这样每次可以循环可以O(1)时间找到下一个最小的丑数 ...
随机推荐
- 从零搭建一个IdentityServer——目录(更新中...)
从零搭建一个IdentityServer--项目搭建 从零搭建一个IdentityServer--集成Asp.net core Identity 从零搭建一个IdentityServer--初识Ope ...
- Yacc使用优先级
Yacc使用优先级 本示例是龙书4.9.2的示例,见图4-59. 和前一章一样,新建xUnit项目,用F#语言.起个名C4F59安装NuGet包: Install-Package FSharpComp ...
- 一篇文章图文并茂地带你轻松学完 JavaScript 事件循环机制(event loop)
JavaScript 事件循环机制 (event loop) 本篇文章已经默认你有了基础的 ES6 和 javascript语法 知识. 本篇文章比较细致,如果已经对同步异步,单线程等概念比较熟悉的读 ...
- 用Python修改本机适配器信息
主要参考来自[用Python干实事(一)自动修改Windows的IP.网关和DNS设置]. 使用_winreg模块来操作注册表实现相关信息的修改,它是python的内置模块.也可以通过Win32 Ex ...
- Codeforces Round #646 (Div. 2) C. Game On Leaves (贪心,博弈)
题意:给你一棵树,每次可以去掉叶节点的一条边,Ayush先开始,每回合轮流来,问谁可以第一个把\(x\)点去掉. 题解:首先如果\(x\)的入度为\(1\),就可以直接拿掉,还需要特判一下入度为\(0 ...
- 1009E Intercity Travelling 【数学期望】
题目:戳这里 题意:从0走到n,难度分别为a1~an,可以在任何地方休息,每次休息难度将重置为a1开始.求总难度的数学期望. 解题思路: 跟这题很像,利用期望的可加性,我们分析每个位置的状态,不管怎么 ...
- bochs 调试 com 文件 magicbreak
参考 https://blog.csdn.net/housansan/article/details/41833581 在网上看到2中解决此问题的方法:1.使用dos下的debug32工具单步跟踪pm ...
- HEXO添加置顶功能
使用库:参考 http://wangwlj.com/2018/01/09/blog_pin_post/ 目前已经有修改后支持置顶的仓库,可以直接用以下命令安装.(cmd 到博客根目录,nmp运行) $ ...
- codeforces 870C
C. Maximum splitting time limit per test 2 seconds memory limit per test 256 megabytes input standar ...
- CSS字体大小: em与px、pt、百分比之间的对比
CSS样式最混乱的一个方面是应用程序中文本扩展的font-size属性.在CSS中,你可以用四个不同的单位度量来显示在web浏览器中的文本大小.这四个单位哪一种最适合Web? 这个问题引起了广泛的 ...