POJ1338 Ugly Numbers
来源:互联网 发布:sql语句查询重复数据 编辑:程序博客网 时间:2024/06/06 04:39
题目大意:规定质因子只有2,3,5的数是Ugly Numbers。对于给定的n,输出第n个Ugly Numbers。(n<=1500)
分析:
可以先求出前1500个Ugly Numbers,然后直接输出即可。因此可以得到所有的Ugly Numbers都是2^a*3^b*5^c,其中a,b,c>=0.直接枚举a,b,c没有规律,所以可以使用队列的数据结构。首先将1压入队列,然后循环:取队列首元素e,检查e是否出现过,出现过就继续,没有出现过就将e储存到一个数组里,将e*2,e*3,e*5压入队列。这样之后可以高效地选出所有的Ugly Numbers。可以再度加入一个优化,使用优先队列,那么可以保证数字是严格从小到大出现的。
#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>#include<queue>#include<set>using namespace std;long n,v,w;long long u[2000];struct cmp{bool operator() (long long a,long long b) {return a>b;}};priority_queue<long long,vector<long long>,cmp> q;bool find(long long k){for(long i=1;i<=v;i++) if(u[i]==k) return true; return false;}int main(){freopen("in.in","r",stdin); q.push(1); long long a; w=1; while(v<=1500){a=q.top(); q.pop(); if(!find(a)){u[++v]=a; q.push(a*2); q.push(a*3); q.push(a*5);}} while(~scanf("%d",&n) && n) cout<<u[n]<<endl; return 0;}
本来判重是用set实现的,但是效率太低,反而不如暴力的一位数组。
1 0
- poj1338(Ugly Numbers)
- poj1338 Ugly Numbers(技巧)
- 枚举 poj1338 Ugly Numbers
- POJ1338 Ugly Numbers
- poj1338 Ugly Numbers
- POJ1338 Ugly Numbers
- POJ1338 Ugly Numbers
- poj1338——Ugly Numbers
- UVA 136 & POJ1338 Ugly Numbers
- POJ1338 Ugly Numbers 丑数 [数论]
- poj1338 Ugly Numbers(set + 优先队列)
- POJ1338 Ugly Numbers(解法二)
- poj1338 Ugly Numbers(丑数模拟)
- POJ1338 Ugly Numbers 堆优化+模拟
- Ugly Numbers(POJ1338)(丑数,技巧性强)
- 【日常学习】【优先队列】POJ1338 Uva136 - Ugly Numbers题解
- poj1338 ugly number 题解 打表
- Ugly Numbers
- 文章标题
- 九度OJ 1133:学分绩点 (加权平均数)
- C程序内存布局
- webrtc_ns模块android手机音频处理
- HDU 2452 Navy maneuvers (记忆化搜索)
- POJ1338 Ugly Numbers
- 九度OJ 1134:密码翻译 (翻译)
- 利用js修改 css样式 注意点 !important
- 三条坐标轴为母线的圆锥面方程
- 新买服务器软件安装出现不能安装或者安装exe没反应的情况
- 九度OJ 1135:字符串排序 (排序)
- bzoj4102【Usaco2015 Open】Bessie
- android studio制作9-patch图片
- LM2596的肖特基二极管选择的注意点