您的位置:首页 > 其它

TYVJ 1001 第K极值

2015-08-22 20:15 344 查看
题目链接:http://tyvj.cn/p/1001

题目很简单,由于n最大10000,我们可以先sort一下,然后算出第K大和第K小,然后判断一下是不是素数。这里可以离线筛法也可以根号ans直接判断,我想再复习一遍线性筛就打了一遍~

tyvj评测机挂了但是还是有数据的,这题数据我就不放了,因为这题数据有问题,数据中没有K。……我RE了无数次看了数据瞬间崩溃……

代码如下:

[code]#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: