诡异事件

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

chrispang @ 2024-05-18 21:45:20

吸引你点进来的是这个帖子的标题

p1923不是在快排分解的时候只分解其中一边的吗?可我为啥子还是60分,TLE了两个点。

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

int n, k;
vector<int> vec;
vector<int> p1923(int left, int right)
{
    if (left == right) {
        cout << vec[left] << endl;
        exit(0);
    }
    int i, j, pivot;
    i = left, j = right, pivot = vec[left];

    while (i < j)
    {
        while (vec[j] >= pivot && i < j) j--;
        while (vec[i] <= pivot && i < j) i++;

        if (i < j)
        {
            swap(vec[i], vec[j]);
        }
    }
    swap(vec[i], vec[left]);
    if (i < k) p1923(i + 1, right);
    else if(i > k) p1923(left, i - 1);
    else {
        cout << vec[i] << endl;
        exit(0);
    }
    return vec;
}

int main()
{
    cin >> n >> k;
    for (int i = 0; i < n; i++)
    {
        int t;
        cin >> t;
        vec.push_back(t);
    }

    p1923(0, vec.size() - 1);
    return 0;
}

by jiangzhili @ 2024-05-20 15:16:07

@chrispang

我也是,60分,最后两个点TLE,你可以把 cincout 改成 scanfprintf

或者加上 :

std::ios::sync_with_stdio(false);

by zhuyucheng6046 @ 2024-06-01 18:27:59

现在代码用这么长吗


#include<bits/stdc++.h>
using namespace std;
int a,b;
int main()
{
    scanf("%d%d",&a,&b);
    int n[a];
    for(int i=0;i<a;i++)
    scanf("%d",&n[i]);
    sort(n,n+a);
    printf("%d",n[b]);
    return 0;
}
注意用“printf”“scanf”
如果用“cin”“cout”会:
[](https://www.luogu.com.cn/record/160982971)

|