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\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 #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\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 }
如果你不开心,那我就把右边这个帅傻子分享给你吧,
你看,他这么好看,那么深情的望着你,你还伤心吗?
真的!这照片盯上他五秒钟就想笑了。
一切都会过去的。