有没有大佬解释一下,只是改下第一个数的下标,第五个测试点就对了
查看原帖
有没有大佬解释一下,只是改下第一个数的下标,第五个测试点就对了
601892
One_last_Spider_man楼主2023/8/28 21:02

原代码(#5 1130ms):

#include <bits/stdc++.h>
using namespace std;
int k;
int a[5000005];
void sort(int l,int r) {
    int i = l,j = r,flag =a[(l+r)/2];
    do {
        while(a[i] < flag) i++;
        while(a[j] > flag) j--;
        if(i <= j) 
			{
            swap(a[i],a[j]);
            i++;j--;
            }
    }while(i<=j);
    if(k+1 <= j) sort(l,j);
    else if(k+1 >= i) sort(i,r);
    else{
    	printf("%d" , a[k+1]);
    	exit(0);
	}
}
int main(){
	int n;
    scanf("%d%d" , &n , &k);
    for(int i=1;i<=n;++i) scanf("%d" , &a[i]);
    sort(1,n);
    return 0;
}

该了个数(#5 343ms):

#include <bits/stdc++.h>
using namespace std;
int a[5000005],k;
void sort(int l,int r) {
    int i = l,j = r,flag =a[(l+r)/2];
    do {
        while(a[i] < flag) i++;
        while(a[j] > flag) j--;
        if(i <= j) 
			{
            swap(a[i],a[j]);
            i++;j--;
            }
    }while(i<=j);
    if(k <= j) sort(l,j);
    else if(k >= i) sort(i,r);
    else{
    	printf("%d" , a[j+1]);
    	exit(0);
	}
}
int main(){
	int n;
    scanf("%d%d" , &n , &k);
    for(int i=0;i<n;++i) scanf("%d" , &a[i]);
    sort(0,n-1);
    return 0;
}
2023/8/28 21:02
加载中...