不是很能理解为什么会MLE。
在第四个点中优先队列的空间消耗为88MB倒是真的
#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;//改为int会WA
typedef pair<ull,int> node;
//first为丑数的值,second用来解决丑数重复问题,会快一捏捏
ull S[107] = {1};//用来存质数,质数小于1<<31
priority_queue<node,vector<node>,greater<node> > Q;//丑数用优先队列排序
int main()
{
Q.push(node(1,1));//存一个初始数
int k,num;
cin>>k>>num;
for(register int i=1;i<=k;i++)
{
cin>>S[i];
}
sort(S,S+k+1,less<ull>());//给素数排个序
for(int i=0;i<=num;i++)
{
node tempnode = Q.top();
Q.pop();
if(i==num){//得到第num个丑数就输出结果
cout<<tempnode.first;
break;
}
for(int j=tempnode.second;j<=k;j++)//新的丑数入队
Q.push(node(tempnode.first*S[j],j));
}
return 0;
}