USACO Humble Numbers
USACO
Humble Numbers
这题主要是两种做法,第一种是比较常(jian)规(dan)的-------------用pq(priority_queue)维护,每次取堆中最小值(小根堆),用这个值松(mei)弛(ju)一遍所有的素数,大概是O(n*k*logn)的,所以--------闭眼睛T啊!!
冷静一下,我们来看第二种做法:
显然,在第一种做法中,我们重复计算了堆中的好多值,而这些我们可以通过记录一个地址来优化。
我们假设已经求出了前i个丑数,对于第(i+1)个丑数,我们可以枚举所有的素数并且记录这个素数已经枚举到了哪个丑数,这样我们在接下来的求解过程中就不会重复那些当前地址之前的所有丑数。
附上想丑数一样丑陋的代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
ll a[];
int dis[];
ll ugly[];
int main()
{
int n,m;
scanf("%d%d",&n,&m);
a[]=;
for(int i=;i<=n;i++)
{
scanf("%lld",&a[i]);
}
sort(a+,a+n+);
ugly[]=;
memset(dis,,sizeof(dis));
int minn;
for(int i=;i<=m;i++)
{
minn=n;//记录哪一个值恰好满足条件
for(int j=;j<=n;j++)
{
if(a[j]*ugly[dis[j]]>ugly[i-]&&a[j]*ugly[dis[j]]<a[minn]*ugly[dis[minn]])
minn=j;
}
ugly[i]=a[minn]*ugly[dis[minn]];//更新满足条件者
dis[minn]++;//更新满足条件者
for(int j=;j<=n;j++)
{
while(a[j]*ugly[dis[j]]<ugly[i]) dis[j]++;
if(a[j]*ugly[dis[j]]==ugly[i]) dis[j]++;
}
}
printf("%lld",ugly[m]);
return ;
}
小结:本题所得到的想法及错误。
1.没更新主值(ugly);
2.35行是重要的,因为如果这个素数的地址并没有满足要求,那么它在下一次枚举时会被自动忽略掉,所以我们要将已经Gg的地址更新至可用但不绝对。
3.dis数组和ugly数组的初值很重要。
转载请注明:http://www.cnblogs.com/ShuraK/p/7846412.html
USACO Humble Numbers的更多相关文章
- USACO 3.1 Humble Numbers
Humble Numbers For a given set of K prime numbers S = {p1, p2, ..., pK}, consider the set of all num ...
- 洛谷P2723 丑数 Humble Numbers
P2723 丑数 Humble Numbers 52通过 138提交 题目提供者该用户不存在 标签USACO 难度普及/提高- 提交 讨论 题解 最新讨论 暂时没有讨论 题目背景 对于一给定的素数 ...
- Luogu2723丑数Humble Numbers【归并排序】
Luogu2723丑数Humble Numbers 题目背景 对于一给定的素数集合 S = {p1, p2, ..., pK},考虑一个正整数集合,该集合中任一元素的质因数全部属于S.这个正整数集合包 ...
- 洛谷P2723 丑数 Humble Numbers [2017年 6月计划 数论07]
P2723 丑数 Humble Numbers 题目背景 对于一给定的素数集合 S = {p1, p2, ..., pK},考虑一个正整数集合,该集合中任一元素的质因数全部属于S.这个正整数集合包括, ...
- [poj2247] Humble Numbers (DP水题)
DP 水题 Description A number whose only prime factors are 2,3,5 or 7 is called a humble number. The se ...
- HDU - The number of divisors(约数) about Humble Numbers
Description A number whose only prime factors are 2,3,5 or 7 is called a humble number. The sequence ...
- A - Humble Numbers
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status Pract ...
- The number of divisors(约数) about Humble Numbers[HDU1492]
The number of divisors(约数) about Humble Numbers Time Limit: 2000/1000 MS (Java/Others) Memory Lim ...
- Humble Numbers
Humble Numbers Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9988 Accepted: 4665 Descri ...
随机推荐
- php5.3命名空间内使用 php内置类的时候
在命名空间内使用内置类库的时候,需要使用 \ 比如 $zip =new \ZipArchive;
- Filter组件开发中的SDK基类分析
DirectShow SDK提供了一套开发Filter的基类源代码.基于这些基类开发Filter将大大简化开发过程. 1.CBaseObject 大部分SDK类都从CBaseObject类(参见com ...
- 使用dos的tree命令输出文件夹树
用dos的tree命令就可以实现文件夹树状图的输出,不过目前仅能输出为.txt文件 方法如下: 开始->运行 输入cmd打开命令控制台 切换到你要显示的列表文件夹 比如 输入 d: 切换到d盘 ...
- xml的xPath解析规则
一,为什么要用xpath技术 问题:当使用dom4j查询比较深的层次结构的节点(标签,属性,文本),比较麻烦!!! 二,xpath的规则 2.1,/根元素的案例 /AAA 选择根元素AAA ...
- jquery自带的方法
5.1,$.trim $.trim(" Hello, chinaren_1123 & 摆渡浮桥! "); //去掉前后空格后->Hello, chinaren ...
- JAVA IDE IntelliJ IDEA 快捷键使用详记
一.高效定位代码 1.项目之间的跳转 Ctrl + Alt + [ :切换到下一个项目窗口 Ctrl + Alt + ] : 切换到上一个项目窗口 2.文件之间的跳转↑↓←→ Ctrl + E ...
- KMP算法 Next数组详解
题面 题目描述 如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置. 为了减少骗分的情况,接下来还要输出子串的前缀数组next.如果你不知道这是什么意思也不要问,去百 ...
- 【BZOJ4736】温暖会指引我们前行(Link-Cut Tree)
[BZOJ4736]温暖会指引我们前行(Link-Cut Tree) ##题面 神TM题面是UOJ的 题解 LCT傻逼维护最大生成树 不会的可以去做一做魔法森林 #include<iostrea ...
- 【BZOJ3262】陌上花开(CDQ分治)
[BZOJ3262]陌上花开(CDQ分治) 题解 原来放过这道题目,题面在这里 树套树的做法也请点上面 这回用CDQ分治做的 其实也很简单, 对于第一维排序之后 显然只有前面的对后面的才会产生贡献 那 ...
- DaTaX当成jar包当作第三方库启动的相关问题
上一篇已经大致的将了本地状况下DaTaX的纯Java代码启动的过程 http://www.cnblogs.com/blogsofmy/p/8287637.html不了解的请点超链接 这次我们来说说文件 ...