kissu @ 2023-08-18 10:25:58
#include<bits/stdc++.h>
using namespace std;
int jiaqs(int a[],int l,int h,int k){
if(l==h)return a[l];
int i=l-1,j=h+1,v=a[h],index=h;
while(i<j){
while(++i<=v)if(i==j)goto xycfq;
a[index]=a[i];index=i;
while(--j>=v)if(i==j)goto xycfq;
a[index]=a[j];index=j;
}
xycfq:a[i]=v;
if(i>k)return jiaqs(a,l,i-1,k);
else if(i==k)return a[i];
else return jiaqs(a,i+1,h,k);
}
int main(){
int n,k;
cin>>n>>k;
int a[n];
for(int i=0;i<n;i++){
cin>>a[i];
}
cout<<jiaqs(a,0,n-1,k);
return 0;
}
by xiaoyun233 @ 2023-08-18 10:57:30
咳咳,如果你懒直接sort就行了 用sort时间复杂度为O(n logn),这个题绝对会超时,但是可以用以下方法压缩时间:
1.使用快读/只用printf和scanf/只用cin和cout并在main函数开头加上一句话
main(){
ios::sync_with_stdio(0)
·····
以此来增加读写速度
2.for 循环的临时变量前面加上register关键字比如
for(register int i=0;i<m;i++)······
(可能现在对于版本C++作用不是很大)
3.开启O2优化!!!(最重要)
by xiaoyun233 @ 2023-08-18 11:00:40
@kissu 我不知道用你的代码行不行,反正我只用了9行 (不用using namespace std能省一行awa)
#include<bits/stdc++.h>
long n,k,A[5000000];
int main(){
std::ios::sync_with_stdio(0);
std::cin>>n>>k;
for(register int i=0;i<n;i++)std::cin>>A[i];
std::sort(A,A+n);
std::cout<<A[k];
return 0;}
(必须开O2优化)
by xiaoyun233 @ 2023-08-18 11:09:38
@kissu
补充:
4.对于这道题,n和k/存入的数据只需要用int,开long long更费时间(虽然你没开)
by RKSSSKR @ 2023-08-18 11:11:25
你把输出改一下就行了
by RKSSSKR @ 2023-08-18 11:12:09
输出改完后,你的代码还是有点问题。