tyvj P1001 第K极值

tyvj P1001 第K极值

排序之后找到正数第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 ;
}

你可能感兴趣的:(tyvj P1001 第K极值)