P1923 【深基9.例4】求第 k 小的数
#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;
}
请各位高人指点,谢谢
附图:
提交结果:
建议你在for循环读入的同时就比较大小。
TLE的意思是说时间超限,有两个建议,1.使用scanf和printf。其实你的代码可以试一试,输入一个数组,然后用sort排序,输出第k个数据,因为随着代码行数增多,运行时间就会增加,尤其是有5000000怎么大的数据量
【以下回答由 GPT 生成】
对于洛谷的TLE问题,有几个可能的原因和解决方案:
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;
}
#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,可能需要进一步优化算法,或者检查输入数据量是否过大导致超时。