您的位置:首页 > 其它

USACO 3.1 Humble Numbers丑数_优先队列

2016-12-08 20:54 513 查看

题目大意

找出自然数中因子含有a[i]的第m小的数

思路

用优先队列直接求解,每次往堆里面塞top∗a[1],top∗a[2]……然后删掉堆顶,但会蜜汁爆内存。。。

时间复杂度很玄学,不会算。。。

大神指点

O(NKlogN)

#include <stdio.h>
#include <queue>
using namespace std;
priority_queue<long long,vector<long long&
cb87
gt;,greater<long long> > heap;
long long a[10000],f[10000];
int main()
{
long long m,n;
scanf("%I64d%I64d",&m,&n);
for (int i=1;i<=m;i++)
{
scanf("%I64d",&a[i]);
}

heap.push(1);
long long t=0;
while (t<=n)
{
int x=heap.top();
if (f[t]<x)
{
t++;
f[t]=x;
}
heap.pop();
for (int j=1;j<=m;j++)
heap.push(x*a[j]);
}
printf("%I64d\n",f[n+1]);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: