洛谷代码提交结果TLE

P1923 【深基9.例4】求第 k 小的数

img


以上题我提交代码上去,总是会显示TLE,以下是我的代码:

#include<bits/stdc++.h>
using namespace std;
priority_queue<int, vector<int>, greater<int> > q;
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    int n, k;
    cin >> n >> k;
    int m, a[n];
    for(int i = 0; i < n; i++)
    {
        cin >> m;
        q.push(m);
    }
    int i = 0;
    while(!q.empty())
    {
        a[i] = q.top();
        q.pop();
        i++;
    }
    cout << a[k];
    return 0;
}

请各位高人指点,谢谢
附图:
提交结果:

img

建议你在for循环读入的同时就比较大小。

TLE的意思是说时间超限,有两个建议,1.使用scanf和printf。其实你的代码可以试一试,输入一个数组,然后用sort排序,输出第k个数据,因为随着代码行数增多,运行时间就会增加,尤其是有5000000怎么大的数据量

【以下回答由 GPT 生成】

对于洛谷的TLE问题,有几个可能的原因和解决方案:

  1. 使用单个线程可能导致超时。开启多线程可以提高程序的运行速度。可以使用C++的thread库来实现多线程。
#include <bits/stdc++.h>
#include <thread>
using namespace std;

priority_queue<int, vector<int>, greater<int> > q;
int a[1000000];

void solve()
{
    int n, k;
    cin >> n >> k;
    int m;
    for(int i = 0; i < n; i++)
    {
        cin >> m;
        q.push(m);
    }
    int i = 0;
    while(!q.empty())
    {
        a[i] = q.top();
        q.pop();
        i++;
    }
    cout << a[k];
}

int main()
{
    int n;
    cin >> n;

    thread t[n];
    for(int i = 0; i < n; i++){
        t[i] = thread(solve);
    }

    for(int i = 0; i < n; i++){
        t[i].join();
    }

    return 0;
}
  1. 使用优先队列可能效率较低。优先队列在插入和弹出元素时的时间复杂度为O(logN),性能较差。可以考虑使用其他数据结构来代替。
#include <bits/stdc++.h>
#include <thread>
using namespace std;

multiset<int> s;
int a[1000000];

void solve()
{
    int n, k;
    cin >> n >> k;
    int m;
    for(int i = 0; i < n; i++)
    {
        cin >> m;
        s.insert(m);
    }
    int i = 0;
    for(auto it = s.begin(); it != s.end(); it++)
    {
        a[i] = *it;
        i++;
    }
    cout << a[k];
}

int main()
{
    int n;
    cin >> n;

    thread t[n];
    for(int i = 0; i < n; i++){
        t[i] = thread(solve);
    }

    for(int i = 0; i < n; i++){
        t[i].join();
    }

    return 0;
}

以上是两种可能的优化方案,可以分别尝试并观察是否对TLE问题有所改善。如果还是TLE,可能需要进一步优化算法,或者检查输入数据量是否过大导致超时。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^