[jobdu]丑数
由于思维的惯性,用了queue。后来发现一要注意要用集合判重,二是每次往queue里放的多,后来溢出了,要用long long。但这样要用数组,集合,队列,内存多。效率是O(n*logn)的。
#include <iostream>
#include <algorithm>
#include <memory.h>
#include <vector>
#include <queue>
#include <set>
#include <functional>
#define LEN 1505
#define ulong unsigned long long
using namespace std; ulong dp[LEN]; int main()
{
priority_queue<ulong, vector<ulong>, greater<ulong> > que;
set<ulong> visit;
que.push(1);
visit.insert(1);
int i = 0;
while (i < LEN) {
i++;
int node = que.top();
que.pop();
dp[i] = node;
if (visit.count(node*2) == 0) {
que.push(node*2);
visit.insert(node*2);
}
if (visit.count(node*3) == 0) {
que.push(node*3);
visit.insert(node*3);
}
if (visit.count(node*5) == 0) {
que.push(node*5);
visit.insert(node*5);
}
}
int n;
while (cin >> n) {
cout << dp[n] << endl;
}
}
另有效率O(n),空间O(1)的方法。因为本质上是已有的丑数*2,*3,*5的结果在竞争,那么每次记录*2,*3,*5的丑数的编号(用数组记录已经生成的丑数),然后比较产生最小的,就是下一个丑数。
http://blog.csdn.net/acm_zl/article/details/10613073
#include <iostream>
#include <memory.h>
#define MIN(a,b) a<b?a:b
#define LEN 1505
#define ulong unsigned long long
using namespace std; ulong ugly[LEN]; int main()
{
memset(ugly, 0, sizeof(ugly));
ugly[1] = 1;
int index2 = 1;
int index3 = 1;
int index5 = 1;
for (int i = 2; i < LEN; i++)
{
ulong m2 = 2 * ugly[index2];
ulong m3 = 3 * ugly[index3];
ulong m5 = 5 * ugly[index5];
int tmp = MIN(m2, m3);
ulong m = MIN(tmp, m5);
ugly[i] = m;
if (m == m2) index2++;
if (m == m3) index3++;
if (m == m5) index5++;
} int n;
while (cin >> n) {
cout << ugly[n] << endl;
}
}
[jobdu]丑数的更多相关文章
- [Jobdu] 题目1214:丑数
题目描述: 把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含因子7.习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. 输入: 输 ...
- 九度OJ 1214 寻找丑数【算法】
题目地址:http://ac.jobdu.com/problem.php?pid=1214 题目描述: 把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因 ...
- 【剑指Offer面试编程题】题目1214:丑数--九度OJ
把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. 输入: 输入包括一个 ...
- AC日记——丑数 codevs 1246
1246 丑数 USACO 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description 对于一给定的素 ...
- 剑指Offer面试题:29.丑数
一.题目:丑数 题目:我们把只包含因子2.3和5的数称作丑数(Ugly Number).求按从小到大的顺序的第1500个丑数.例如6.8都是丑数,但14不是,因为它包含因子7.习惯上我们把1当做第一个 ...
- 剑指Offer:面试题34——丑数(java实现)
问题描述: 把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. 思路1: ...
- UVA136 求第1500个丑数
枚举大范围数据..暴力检查题目条件 #include <iostream> #include <cstdio> #include <vector> #include ...
- 37.寻找丑数[Ugly numbers]
[题目] 我们把只包含质因子2.3和5的数称作丑数(Ugly Number),例如:2,3,4,5,6,8,9,10,12,15,等,习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第1500个丑 ...
- hdu1058丑数(优先队列、暴力打表)
hdu1058 题意:当一个数只有2.3.5.7这四种质因数时(也可以一种都没有或只有其中几种),这个数就是丑数,输出第 n 个丑数是多少: 其实并没有发现hdu把这道题放在 dp 专题里的意图,我的 ...
随机推荐
- c# xml 解析取值
//字符串 string result = "<?xml version=\"1.0\" encoding=\"utf-8\"?>< ...
- mysqlimport 导入文件到数据库命令
mysqlimport -h 172.16.145.125 -u ocetl -pocetl test --fields-terminated-by='|' '/home/ocetl/tmp_use ...
- c++和c#之间的类型转换
//C#调用C++的DLL搜集整理的所有数据类型转换方式,可能会有重复或者多种方案,自己多测试 //c++:HANDLE(void *) ---- c#:Sy ...
- 百度贴吧图片抓取工具(Python)
废话不多说,直接上源码. import os,urllib,urllib2,re path='E:/img' #图片保存路径 url=raw_input('Please input URL:')#贴吧 ...
- php连接Access数据库的三种方法
http://www.php100.com/html/webkaifa/PHP/PHPyingyong/2009/1115/3524.html 虽然不是一个类但先放这儿吧 最近想把一个asp的网站改成 ...
- java多线程总结六:经典生产者消费者问题实现
这是个线程同步的经典例子,源代码如下: <span style="font-size:16px;">package demo.thread; /** *经典生产者与消费 ...
- Brackets 配置
插件 Brackets Icons 左侧导航的文件图标 FuncDocr 注释工具 QuickDocsJS js帮助文档 Beautify 格式化代码 Brackets Git git支持 ...
- ASP.NET 使用C#代码设置页面元素中的样式或属性
在HTML元素的属性中加上runat ="server"和ID="MyTag"即可在后台代码中通过设置MyTag.Style的值来控制样式. 例如:在前端页面加 ...
- 《C#入门典》
这本书算是我读的第一本关于.NET的书. 上大学的时候,教我们课的老师经常给我们安利"Wrox红皮书",说这是程序员写给程序员的书,有很高的参考价值. 这本书的电子版,有1000多 ...
- Headfirst设计模式的C++实现——组合模式(Composite)
menu_component.h #ifndef _MENU_COMPONENT_H_ #define _MENU_COMPONENT_H_ #include <string> class ...