Code[VS] 1979 第k个数

来源:互联网 发布:公司域名备案需要多久 编辑:程序博客网 时间:2024/06/11 20:25
【题意】
给定一个长度为N(0<n<=10000)的序列,
保证每一个序列中的数字a[i]是小于maxlongint的非负整数 。
编程要求求出整个序列中第k大的数字减去第k小的数字的值m,并判断m是否为质数。(0<k<=n)

【分析】
由于是静态的,先排序然后就可以知道大小了。
设从小到大排完序后的数列为P‘,则第k大的为mx=P'[n-k+1],第k小的为mn=P'[k]
所以差为t=mx-mn
①当t<=1时,直接判定非素数
②当t>1时,用根号n的试除法判定就行了
注意①的坑点

【实现】

#include <cstdio>#include <cstring>#include <cstdlib>#include <cmath>#include <algorithm>using namespace std;int n,k,p[10001];int t;int can(int i){if (i<=1) return 0;for (int k=2;k<=(int)sqrt(i);k++) if (i%k==0) return 0;return 1;}int main(void){scanf("%d%d",&n,&k);for (int i=1;i<=n;i++) scanf("%d",&p[i]);sort(p+1,p+n+1);if (can(t=p[n-k+1]-p[k])) printf("YES\n"); else printf("NO\n");printf("%d\n",t);return 0;}




0 0
原创粉丝点击