[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

输入样例

YES
2

输出样例

因为我太菜了,取第K值只会排序

所以我用排序,然后算出第K大-第K小

然后进行操作

#include<bits/stdc++.h>
using namespace std;
int a[10005];
bool prime(int x)
{
    if(x==1) return true;
    for(int i=2;i<=sqrt(x);i++)
    if(x%i==0) return true;
    return false;
}
int main()
{
    int n,k;scanf("%d%d",&n,&k);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
    }
    sort(a+1,a+1+n);
    int t=a[n-k+1]-a[k];
    if(prime(t)||t<2) puts("NO");
    else puts("YES");
    printf("%d",t);
    return 0;
}

原文地址:https://www.cnblogs.com/fsy2017/p/9876759.html

时间: 2024-08-29 02:17:16

[Tyvj1001]第K极值 (贪心?模拟)的相关文章

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

1002 Game (贪心模拟)

1002 Game (贪心模拟)Accepts: 572 Submissions: 6218 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem Description 度度熊在玩一个好玩的游戏. 游戏的主人公站在一根数轴上,他可以在数轴上任意移动,对于每次移动,他可以选择往左或往右走一格或两格. 现在他要依次完成 n 个任务,对于任务 i,只要他处于区间 [ai,bi]

[贪心+模拟] zoj 3829 Known Notation

题目链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5383 Known Notation Time Limit: 2 Seconds      Memory Limit: 65536 KB Do you know reverse Polish notation (RPN)? It is a known notation in the area of mathematics and computer science.

POJ 1979 POJ 3009 AOJ 0033 AOJ 0118 [搜索类题目][0033贪心模拟]

/** POJ 1979 BFS */ #include <stdio.h> #include <string.h> #include <iostream> #include <queue> using namespace std; const int N = 20 + 5; int mp[N][N]; int sx,sy; int n, m; int vis[3000]; int dirx[] = {0, 1, 0, -1}; int diry[] = {

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

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 输入格式: 1

hdu 4915 Parenthese sequence (贪心+模拟)

题目大意: 一个序列中有左括号和右括号,还有问号,问号可以任意转换成左右括号. 问这个序列有多少种情况的转变使得这个序列变成合法的括号匹配序列. 思路分析: 首先我们分析一下,如何使得一个序列是合法的括号匹配序列. 我们很容易想到的是用栈模拟匹配过程. 当遇到左括号就进栈,当遇到右括号就让栈顶的左括号出栈. 那么在模拟的过程中,造成这个序列的不合法的原因只有当右括号来的时候,此时的栈已经为空. 这里补充一句,一旦一个序列给定,那么这里面的问号有多少变成左括号,多少变成右括号,是一定的. 看完以上

UVA 11776 - Oh Your Royal Greediness! - [贪心/模拟]

题目链接:https://cn.vjudge.net/problem/UVA-11776 题意: 给出数字n(0<=n<=1000),代表有n个农民,接下来有n行,每行两个数字S和E代表这个农民工作时间为[S,E]: 每个农民工作时,需要有一个enforcer来监督,且每个enforcer一次只能监督一个农民: 求最少需要多少个enforcer. 题解: 这道题我也不太清楚算贪心还是算模拟,可能两者都有一点吧. 首先我们根据正常思维,既然要模拟分配监工去监督农民,那么肯定先给第一个开始做的农民

hdu 4023 2011上海赛区网络赛C 贪心+模拟

以为是贪心,结果不是,2333 贪心最后对自己绝对有利的情况 点我 1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 #include<cstring> 5 #include<cmath> 6 #include<queue> 7 #include<map> 8 using namespace std; 9 #define MOD 10000000