题目: | 第k极值 | |
来源: | Tyvj 1001 | |
题目大意: | N个数,求第K小第K大的差值是否是质数,是则输出’yes’否则输出’no’,然后输出这 个数 | |
数据范围: | 0<n<=10000,a[i]<=maxlongint | |
样例: | 5 2 1 2 3 4 5 | YES 2 |
做题思路: | Qsort果断解决,判断第k个-第n-k+1个是否是质数 | |
知识点: | 排序,判断质数 |
var a:array[0..100010]of longint; i,n,m:longint; procedure qsort(l,r:longint); var i,j:longint; k,t:longint; begin i:=l;j:=r; k:=a[(l+r) shr 1]; repeat while a[i]<k do inc(i); while a[j]>k do dec(j); ifi<=j then begin t:=a[i];a[i]:=a[j];a[j]:=t; inc(i);dec(j); end; until i>j; ifi<r then qsort(i,r); ifj>l then qsort(l,j); end; function pd(x:longint):string; var i:longint; begin ifx<2 then exit('NO'); fori:=2 to trunc(sqrt(x)) do ifx mod i=0 then exit('NO'); exit('YES'); end; begin readln(n,m); fori:=1 to n do read(a[i]); qsort(1,n); writeln(pd(a[n-m+1]-a[m])); writeln(a[n-m+1]-a[m]); end.