CODEVS——T1979 第K个数

 空间限制: 1000 KB
 题目等级 : 黄金 Gold
 
 
题目描述 Description

给定一个长度为N(0<n<=10000)的序列,保证每一个序列中的数字a[i]是小于maxlongint的非负整数 ,编程要求求出整个序列中第k大的数字减去第k小的数字的值m,并判断m是否为质数。(0<k<=n)

输入描述 Input Description

第一行为2个数n,k(含义如上题)
第二行为n个数,表示这个序列

输出描述 Output Description

如果m为质数则
第一行为'YES'(没有引号)
第二行为这个数m
否则 
第一行为'NO'
第二行为这个数m

样例输入 Sample Input
5 2
1 2 3 4 5
样例输出 Sample Output
YES
2
数据范围及提示 Data Size & Hint

20%数据满足0<n<=10
50%数据满足0<n<=5000
100%数据满足0<n<=10000

 

排序+素数

 1 #include <algorithm>
 2 #include <cstdio>
 3 
 4 using namespace std;
 5 
 6 #define LL long long
 7 LL n,k,a[10000+15],ans;
 8 
 9 bool jud(LL x)
10 {
11     for(LL i=2;i*i<=x;i++)
12         if(x%i==0) return 0;
13     return 1;
14 }
15 bool cmp(LL a,LL b)
16 {
17     return a>b;
18 }
19 
20 int main()
21 {
22     scanf("%lld%lld",&n,&k);
23     for(int i=1;i<=n;i++) scanf("%lld",a+i);
24     sort(a+1,a+n+1);
25     ans-=a[k];
26     sort(a+1,a+n+1,cmp);
27     ans+=a[k];
28     if(ans<2||!jud(ans)) printf("NO\n");
29     else printf("YES\n");
30     printf("%lld",ans);
31     return 0;
32 }

 

posted @ 2017-08-08 16:40  Aptal丶  阅读(195)  评论(0编辑  收藏  举报