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的更多相关文章

  1. 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 ...

  2. 洛谷P2723 丑数 Humble Numbers

    P2723 丑数 Humble Numbers 52通过 138提交 题目提供者该用户不存在 标签USACO 难度普及/提高- 提交  讨论  题解 最新讨论 暂时没有讨论 题目背景 对于一给定的素数 ...

  3. Luogu2723丑数Humble Numbers【归并排序】

    Luogu2723丑数Humble Numbers 题目背景 对于一给定的素数集合 S = {p1, p2, ..., pK},考虑一个正整数集合,该集合中任一元素的质因数全部属于S.这个正整数集合包 ...

  4. 洛谷P2723 丑数 Humble Numbers [2017年 6月计划 数论07]

    P2723 丑数 Humble Numbers 题目背景 对于一给定的素数集合 S = {p1, p2, ..., pK},考虑一个正整数集合,该集合中任一元素的质因数全部属于S.这个正整数集合包括, ...

  5. [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 ...

  6. 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 ...

  7. A - Humble Numbers

    Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Pract ...

  8. The number of divisors(约数) about Humble Numbers[HDU1492]

    The number of divisors(约数) about Humble Numbers Time Limit: 2000/1000 MS (Java/Others)    Memory Lim ...

  9. Humble Numbers

    Humble Numbers Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9988 Accepted: 4665 Descri ...

随机推荐

  1. Servlet配置

    1.在Servlet中,Servlet的配置 @WebServlet(name="csvExportServlet",urlPatterns="/servlet/CsvE ...

  2. java.util.zip.ZipException:ZIP file must have at least one entry

    1.错误描述 java.util.zip.ZipException:ZIP file must have at least one entry 2.错误原因 由于在导出文件时,要将导出的文件压缩到压缩 ...

  3. CF384 div2 E. Vladik and cards

    题意 给你一个的排列,求一个满足条件的最长子序列 每种数字的差小于等于,并且每种数字之内是连续的 解法 首先单纯认为用肯定不行的 所以应该考虑二分答案(所求长度具有二分性) 再用dp判断是否可行,这个 ...

  4. STL(set_pair)运用 CF#Pi D. One-Dimensional Battle Ships

    D. One-Dimensional Battle Ships time limit per test 1 second memory limit per test 256 megabytes inp ...

  5. word文档的动态添加数据

    解释:其实主要的思路就是先把word文档转化成xml格式的数据,然后在把xml格式的数据转化成字节流让程序来读取,最后在把字节流转化成xml格式的数据,然后在转化成word文档. poi工具也是这个思 ...

  6. 如何控制Bean对象的作用域,默认作用域是什么

    1.可以通过<bean>定义的scope属性指定Bean对象的作用域或者使用注解@Scope指定Bean对象的作用域. 2.默认Bean对象的作用域为singleton.

  7. iOS学习——iOS原生实现二维码扫描

    最近项目上需要开发扫描二维码进行签到的功能,主要用于开会签到的场景,所以为了避免作弊,我们再开发时只采用直接扫描的方式,并且要屏蔽从相册读取图片,此外还在二维码扫描成功签到时后台会自动上传用户的当前地 ...

  8. Mac下redis的安装 以及配置支持PHP使用redis

    1 下载最新redis  https://redis.io/download 2 安装redis.  这部分在上面下载链接中 官网提供的有相关操作 如下: $ wget http://download ...

  9. webuploader配置

    做图片上传的时候用webuploader是个不错的选择,他可以通过简单的配置实现图片的上传预览和处理. <!--引入CSS--> <link rel="stylesheet ...

  10. jQuery中的自定义插件之----工厂方法(Factory Widget)

    jQuery赋予了我们很强大的插件自定义的功能,可以作为我们的武器库,应用到所有的网页中,使用的语法比较有意思,下面是对它的一些探讨. 遵循以下的原则: 1 IIFE 创建一个jQuery的scope ...