CODE[VS] 1979 第K个数

题目描述 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<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<algorithm>
 5 #include<cstring>
 6 using namespace std;
 7 
 8 int n,a[10002],k;
 9 
10 bool judge(int x)
11 {
12     for(int i=2;i*i<=x;++i)
13         if(x%i==0) return 0;
14     return 1;
15 }
16 
17 int main()
18 {
19     scanf("%d%d",&n,&k);
20     for(int i=1;i<=n;++i)
21         scanf("%d",&a[i]);
22     sort(a+1,a+n+1);
23     int q=a[n+1-k]-a[k];
24     if(q==0) 
25     {
26         printf("NO
0");
27         return 0;
28      } 
29     if(q==1) 
30     {
31         printf("NO
1");
32         return 0;
33      } 
34     if(judge(q))    
35         printf("YES
%d",q);    
36     else printf("NO
%d",q);
37     return 0;
38 }

但只过了4个点。。。。

,,

wa掉的都是负数吧,,

居然没想到负数。。

那,,歧义?

负质数不算吗?。。。

这题好像负数都算了吧,

,,

然后交上还t一个点。。

什么嘛,

不管了,

2147483647是梅森质数,

2^31-1,

当做常识记住吧,

不考虑别的了,,

特判一下吧,,

AC代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<algorithm>
 5 #include<cstring>
 6 using namespace std;
 7 
 8 int n,a[10002],k;
 9 
10 bool judge(int x)
11 {
12     for(int i=2;i*i<=x;++i)
13         if(x%i==0) return 0;
14     return 1;
15 }
16 
17 int main()
18 {
19     scanf("%d%d",&n,&k);
20     for(int i=1;i<=n;++i)
21         scanf("%d",&a[i]);
22     sort(a+1,a+n+1);
23     int q=a[n+1-k]-a[k];
24     if(q==0) 
25     {
26         printf("NO
0");
27         return 0;
28      } 
29     if(q==1) 
30     {
31         printf("NO
1");
32         return 0;
33      } 
34      if(q<0)
35      {
36          printf("NO
%d",q);
37          return 0;
38      }
39      if(q==2147483647)
40      {
41          printf("YES
2147483647");
42          return 0;
43      }
44     if(judge(q))    
45         printf("YES
%d",q);    
46     else printf("NO
%d",q);
47     return 0;
48 }

如果你不开心,那我就把右边这个帅傻子分享给你吧, 

你看,他这么好看,那么深情的望着你,你还伤心吗? 

真的!这照片盯上他五秒钟就想笑了。 

一切都会过去的。

原文地址:https://www.cnblogs.com/Mary-Sue/p/9424715.html