【Tyvj P1001】第K极值

来源:互联网 发布:淘宝品牌授权书 编辑:程序博客网 时间:2024/05/16 11:42

P1001 第K极值
时间: 1000ms / 空间: 131072KiB / Java类名: Main
背景

成成第一次模拟赛 第一道
描述

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

输入格式:
第一行为2个数n,k(含义如上题)
第二行为n个数,表示这个序列
输出格式

输出格式:
如果m为质数则
第一行为’YES’(没有引号)
第二行为这个数m
否则
第一行为’NO’
第二行为这个数m
测试样例1

输入

5 2
1 2 3 4 5
输出

YES
2
备注

对于第K大的详细解释:
如果一个序列为1 2 2 2 2 3
第1大 为3
第2大 为2
第3大 为2
第4大 为2
第5大 为1
第K小与上例相反

另外需要注意的是
最小的质数是2,如果小于2的话,请直接输出NO

。。
排个序减一下判一下
一句话的题解QAQ
需要注意的题目里都说了
1不是质数不是合数
2是唯一的偶质数

代码如下

#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int main(){       int i,j,k,n,m,t;    int a[102400];    scanf("%d%d",&n,&k);    for(i=1;i<=n;i++)        scanf("%d",&a[i]);    for(i=1;i<=n;i++)        for(j=1;j<=n-i;j++)            if(a[j]<a[j+1]) {t=a[j];a[j]=a[j+1];a[j+1]=t;}    m=a[k]-a[n-k+1]; //与2的关系    if(m==2)       printf("YES\n%d",m);    if(m>2)       for(i=2;i<=m/2+1;i++)           {if(m%i==0) {printf("NO\n%d",m);break;}            if(i==m/2+1) printf("YES\n%d",m);}    if(m<2)       printf("NO\n%d",m);    return 0;}
0 0
原创粉丝点击