题目描述 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 21 2 3 4 5
样例输出 Sample Output
YES2
数据范围及提示 Data Size & Hint
20%数据满足0<n<=10
50%数据满足0<n<=5000100%数据满足0<n<=10000
刚开始觉得挺简单的,
就,,求出来判断就好了,
代码:
1 #include2 #include 3 #include 4 #include 5 #include 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\n0");27 return 0;28 } 29 if(q==1) 30 {31 printf("NO\n1");32 return 0;33 } 34 if(judge(q)) 35 printf("YES\n%d",q); 36 else printf("NO\n%d",q);37 return 0;38 }
但只过了4个点。。。。
,,
wa掉的都是负数吧,,
居然没想到负数。。
那,,歧义?
负质数不算吗?。。。
这题好像负数都算了吧,
,,
然后交上还t一个点。。
什么嘛,
不管了,
2147483647是梅森质数,
2^31-1,
当做常识记住吧,
不考虑别的了,,
特判一下吧,,
AC代码:
1 #include2 #include 3 #include 4 #include 5 #include 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\n0");27 return 0;28 } 29 if(q==1) 30 {31 printf("NO\n1");32 return 0;33 } 34 if(q<0)35 {36 printf("NO\n%d",q);37 return 0;38 }39 if(q==2147483647)40 {41 printf("YES\n2147483647");42 return 0;43 }44 if(judge(q)) 45 printf("YES\n%d",q); 46 else printf("NO\n%d",q);47 return 0;48 }
如果你不开心,那我就把右边这个帅傻子分享给你吧,
你看,他这么好看,那么深情的望着你,你还伤心吗?
真的!这照片盯上他五秒钟就想笑了。
一切都会过去的。