C++ STL尝试解决丑数 求解MLE#4
查看原帖
C++ STL尝试解决丑数 求解MLE#4
407107
QI_YIN楼主2021/4/5 16:36

不是很能理解为什么会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;
}

2021/4/5 16:36
加载中...