心如止水
Je n'ai pas le temps
posts - 400,comments - 130,trackbacks - 0

排序之后找到正数第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<=1return false;
    
if(x==2return 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)  编辑 收藏 引用 所属分类: 题目分类:基础/模拟

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理