P1001 第K极值【tyvj】

 1 /*==========================================
 2 P1001 第K极值
 3 内存限制 128MB     代码限制 64KB
 4 描述 Description
 5 给定一个长度为N(0<n<=10000)的序列,保证每一个序列中的数字a[i]是
 6 小于maxlongint的非负整数 ,编程要求求出整个序列中第k大的数字减去
 7 第k小的数字的值m,并判断m是否为质数。(0<k<=n)
 8 输入格式 InputFormat
 9 输入格式:
10 第一行为2个数n,k(含义如上题)
11 第二行为n个数,表示这个序列
12 输出格式 OutputFormat
13 输出格式:
14 如果m为质数则
15 第一行为‘YES‘(没有引号)
16 第二行为这个数m
17 否则
18 第一行为‘NO‘
19 第二行为这个数m
20 样例输入 SampleInput
21 5 2
22 1 2 3 4 5
23 样例输出 SampleOutput
24 YES
25 2
26
27 数据范围和注释 Hint
28 对于第K大的详细解释:
29 如果一个序列为1 2 2 2 2 3
30 第1大 为3
31 第2大 为2
32 第3大 为2
33 第4大 为2
34 第5大 为1
35 第K小与上例相反
36
37 另外需要注意的是
38 最小的质数是2,如果小于2的话,请直接输出NO
39 ============================================*/
40 #include<stdio.h>
41 #include<stdlib.h>
42 #include<math.h>
43 int fun(long n);//判断n是否质数,是则返回1,否则返回0;
44 int cmp(const void *a,const void *b);
45 int main()
46 {
47     long n,k,*a,i,m;
48     scanf("%ld%ld",&n,&k);
49     a=(long *)malloc(n*sizeof(long));
50     for(i=0;i<n;i++)
51         scanf("%ld",&a[i]);
52     qsort(a,n,sizeof(long),cmp);
53     m=a[n-k]-a[k-1];
54     i=fun(m);
55     if(i==1) printf("YES\n%ld\n",m);
56     else printf("NO\n%ld\n",m);
57     return 0;
58 }
59 int fun(long n)//判断n是否质数,是则返回1,否则返回0;
60 {
61     long i,t;
62     if(n<2) return 0;
63     t=sqrt(n);
64     for(i=2;i<=t;i++)
65     {
66         if(n%i==0) return 0;
67     }
68     return 1;
69 }
70 int cmp(const void *a,const void *b)
71 {
72     return *(long *)a-*(long *)b;
73 }

这个题呢要用long类型数据。要注意第k大数减去第k小数有可能是负数。质数检测也要注意写正确。可以使用快排的就用快排。

好久没写OJ的题目了,再过来看看写写倍觉亲切啊

P1001 第K极值【tyvj】

时间: 2024-10-02 10:23:26

P1001 第K极值【tyvj】的相关文章

P1001 第K极值

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为质数则 第

P1163 第K极值 - Smart Online Judge

题目ID:1163 题目名称:第K极值 有效耗时:496 ms 空间消耗:740 KB 程序代码: 1 #include<iostream> 2 #include<vector> 3 #include<algorithm> 4 using namespace std; 5 6 vector<long long> list; 7 8 bool isprime(long long a){ 9 if(a<2) 10 return false; 11 if(a

[Tyvj1001]第K极值 (贪心?模拟)

考前打tyvj的水题 题目描述 给定一个长度为N(0<n<=10000)的序列,保证每一个序列中的数字a[i]是小于maxlongint的非负整数 ,编程要求求出整个序列中第k大的数字减去第k小的数字的值m,并判断m是否为质数.(0<k<=n) 输入格式 输入格式:第一行为2个数n,k(含义如上题)第二行为n个数,表示这个序列 输出格式 输出格式:如果m为质数则第一行为'YES'(没有引号)第二行为这个数m否则 第一行为'NO'第二行为这个数m 测试数据 5 2 1 2 3 4 5

Tyvj p1371 蛇灵迷宫 (博弈 输出路径)

蛇灵迷宫 描述 Description 李元芳和闪灵在打斗中不慎掉入了蛇灵总坛地下的迷宫,十分恐惧~~~ 迷宫是由n个点组成的,他们停留在1号点,规定他们两个人在一起,每个人轮流决定下一步怎么走,并且只能从序号小的点走向序号大的点,最后无法决定接下来怎么走(走到死路)的人会被处死,另一个人得以逃生. 在这个危机的时刻,拿到地图的李元芳必须以迅雷不及掩耳盗铃的速度判断出自己能否通过做出正确决策来逃生(既然对方是闪灵嘛!当然他每次做出的决策肯定是最好的),所以李元芳向会OI的你求救~~~请你判断出元

融合后如何如何后如何如何

http://ypk.39.net/search/all?k=%A6%C6%B6%F5%D6%DD%C4%C4%C0%EF%C2%F2%C3%C0%C9%B3%CD%AAQ%A3%BA%A3%B8%A3%B6%A3%B3%A3%B9%A3%B0%A3%B2%A3%B9%A3%B6%A3%B2%A1%C6 http://ypk.39.net/search/all?k=%A8z%BE%A3%C3%C5%C4%C4%C0%EF%C2%F2%C3%C0%C9%B3%CD%AAQ%A3%BA%A3%B8%

哥哥ukulele

http://ypk.39.net/search/all?k=%A1%FB%C6%CE%CC%EF%C4%C4%C0%EF%D3%D0%B0%B2%C0%D6%CB%C0%D2%A9%C2%F4Q%A3%BA%A3%B8%A3%B6%A3%B3%A3%B9%A3%B0%A3%B2%A3%B9%A3%B6%A3%B2%A1%BC http://ypk.39.net/search/all?k=%A1%D3%B8%A3%C7%E5%C4%C4%C0%EF%D3%D0%B0%B2%C0%D6%CB%C0

bzoj 3224: Tyvj 1728 普通平衡树.

3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 15114  Solved: 6570[Submit][Status][Discuss] Description 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:1. 插入x数2. 删除x数(若有多个相同的数,因只删除一个)3. 查询x数的排名(若有多个相同的数,因输出最小的排名)4. 查询排名为x的数5. 求x的前驱(前驱定义为

Bzoj3196 Tyvj 1730 二逼平衡树

Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 3350  Solved: 1324 Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:1.查询k在区间内的排名2.查询区间内排名为k的值3.修改某一位值上的数值4.查询k在区间内的前驱(前驱定义为小于x,且最大的数)5.查询k在区间内的后继(后继定义为大于x,且最小的数) Input 第一行两个数 n,m 表示长度为n的有序序列和m个操作第二行

3223: Tyvj 1729 文艺平衡树

3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 3473  Solved: 1962[Submit][Status][Discuss] Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1 Input 第一行为n,m n表示初始序列有n个数,这个序列依次