题目很简单,由于n最大10000,我们可以先sort一下,然后算出第K大和第K小,然后判断一下是不是素数。这里可以离线筛法也可以根号ans直接判断,我想再复习一遍线性筛就打了一遍~
tyvj评测机挂了但是还是有数据的,这题数据我就不放了,因为这题数据有问题,数据中没有K。……我RE了无数次看了数据瞬间崩溃……
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int size = 10010;
bool vis[size*10];
int tot;
int pre[size];
void get()
{
vis[0] = true;
vis[1] = true;
for(int i = 2;i <= size;i ++)
{
if(!vis[i]) pre[++tot] = i;
for(int j = 1,m;j <= tot && (m = i * pre[j]) <= size;j ++)
{
vis[m] = true;
if(i % pre[j] == 0) break;
}
}
}
int num[size];
int main()
{
/// freopen("input.in","r",stdin);
/// freopen("intput.out","w",stdout);
get();
int n,k;
scanf("%d%d",&n,&k);
for(int i = 1;i <= n;i ++)
{
scanf("%d",&num[i]);
}
sort(num+1,num+1+n);
int ans = num[n-k+1] - num[k];
if(ans < 2) printf("NO\n");
if(!vis[ans]) printf("YES\n");
else printf("NO\n");
printf("%d",ans);
/// fclose(stdin);
/// fclose(stdout);
return 0;
}