此博客在洛谷博客食用更佳:传送门
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(

博主在解决洛谷上的丑数问题时,初始尝试使用STL优先队列但遇到全WA的情况。通过分析发现需要去除重复的丑数,并尝试使用桶,但因开销过大放弃。最终,博主选择了C++的set,利用其去重和排序特性成功解决问题,实现0msAC。在后续学习中了解到,其实可以通过在堆中加入去重算法达到相同效果,但堆在理解和实现上更为简洁。
最低0.47元/天 解锁文章
3403

被折叠的 条评论
为什么被折叠?



