P1001第K极值

来源:互联网 发布:用来看美剧的软件 编辑:程序博客网 时间:2024/05/22 06:37
思路:求第k大及第k小的数,并没有什么朴素的判断方法。于是我们考虑将这组数先变为有序再进行直接筛选,然后朴素判断即可。算法复杂度为O(nlogn);
#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>#include<vector>using namespace std;int a[10001];int prim(int n)//简单判断素数{if (n<2) return 0;//若小于2直接返回0 for(int i=2;i<=(int)(sqrt(n));i++){if (n%i==0) return 0;}return 1;}int main (){int n,k;cin>>n>>k;for(int i=0;i<n;i++){cin>>a[i];//将未排序的数存入数组 }sort(a,a+n);//快排 int l=a[k-1];//第k小的数 int r=a[n-k];//第k大的数 if (prim(r-l)) {cout<<"YES"<<endl;cout<<r-l;}else {cout<<"NO"<<endl;cout<<r-l;}return 0;} 

0 0