排序之后找到正数第K个数和倒数第K个数,注意到正数第K个数未必比倒数第K个数大,其差有可能为非正数。
以下是我的代码:
#include<iostream>
#include<math.h>
#define maxn 10007
using namespace std;
void Qsort(long *a,long l,long r)
{
long i=l,j=r,m=a[(l+r)/2];
do{
while(a[i]<m) i++;
while(a[j]>m) j--;
if(i<=j)
{
long t=a[i];a[i]=a[j];a[j]=t;
i++;j--;
}
}while(i<=j);
if(l<j) Qsort(a,l,j);
if(i<r) Qsort(a,i,r);
}
bool Inprime(long x)
{
if(x<=1) return false;
if(x==2) return true;
for(long i=2;i<=(long)sqrt(x)+1;i++)
if(x%i==0)
return false;
return true;
}
int main()
{
freopen("data.in","r",stdin);
freopen("data.out","w",stdout);
long n,k,m,r[maxn];
cin>>n>>k;
for(long i=1;i<=n;i++)
cin>>r[i];
Qsort(r,1,n);
m=r[n-k+1]-r[k];
if(Inprime(m))
cout<<"YES"<<endl;
else cout<<"NO"<<endl;
cout<<m<<endl;
return 0;
}
posted on 2010-10-17 13:59
lee1r 阅读(431)
评论(0) 编辑 收藏 引用 所属分类:
题目分类:基础/模拟