新人求助!40分/60分,整一晚上了
查看原帖
新人求助!40分/60分,整一晚上了
666175
HLlll楼主2022/1/29 02:49
#include <cstdio>
#include <iostream>
#include <cstring>

using namespace std;
long long a[5000010];
inline int read()
{ //快速读入
    int x = 0, f = 1;
    char c = getchar();
    while (c < '0' || c > '9')
    {
        if (c == '-')
            f = -1;
        c = getchar();
    }
    while (c >= '0' && c <= '9')
    {
        x = (x << 1) + (x << 3) + (c ^ 48);
        c = getchar();
    }
    return x * f;
}
void qsort(int begin, int end, int k)
{
    int left = begin;
    int right = end;
    int mid = a[(begin + end) / 2];
    if (begin >= end)
        return;
    while (left < right)
    {
        while (a[right] >= mid && left < right)
            right--;
        while (a[left] <= mid && left < right)
            left++;
        swap(a[left], a[right]);
    }
    a[left] = mid;
    if (k - 1 < left)
        qsort(begin, left - 1, k);
    else if (k - 1 > left)
        qsort(left + 1, end, k);
    else
        return;
}
int main()
{
    int n, k;
    //cin>>n>>k;
    scanf("%d%d", &n, &k);
    for (int i = 0; i < n; i++)
    {
        scanf("%d", &a[i]);
    }
    qsort(0, n - 1, k);
    printf("%d", a[k]);
    return 0;
}

第33行和34行,如果没有等号就只能过后面三个测试(前两个TLE),如果有等号就只能过前面两个测试(后面三个WA),这是为什么啊,求大佬解答

2022/1/29 02:49
加载中...