danzai10 @ 2023-09-04 13:21:14
#include<bits/stdc++.h>
using namespace std;
int main() {
int n,a[1005],b,c;
cin>>n>>b;
for(int i=0; i<n; i++)cin>>a[i];
for(int i=0; i<n-1; i++) {
for(int j=0; j<n-i-1; j++) {
if(a[j]>a[j+1])swap(a[j],a[j+1]);
}
}
cout<<a[b]<<" ";
return 0;
}
by ljc888 @ 2023-09-04 13:28:41
你数组开小了
by ljc888 @ 2023-09-04 13:29:10
他说“1≤n<5000000 ”
by ljc888 @ 2023-09-04 13:32:23
如果对你有帮助可以关注一下吗?谢谢!
by ljc888 @ 2023-09-04 13:32:35
@danzai10
by ljc888 @ 2023-09-04 13:38:40
哦,对于你的代码,如果改回来还是会T,因为你的时间复杂度是O(n^2)你需要把你的循环改成nth_element
,还要加一个快读,或者scanf:
#include<bits/stdc++.h>
using namespace std;
long long n,a[5000010],b,c;
int main(){
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin>>n>>b;
for(int i=0; i<n; i++)cin>>a[i];
nth_element(a,a+b,a+n);
cout<<a[b]<<" ";
return 0;
}
by cute_overmind @ 2023-09-04 13:45:50
@ljc888 请尽量不要使用 nth_element 来写本题,因为本题的重点在于练习分治算法。
这是题目上说的 个人看法而已
by danzai10 @ 2023-09-08 19:43:46
谢谢,已关。