问题链接:CCF NOI1118 序列第K小



时间限制: 1000 ms  空间限制: 262144 KB

题目描述

给定一个长度为n(1<=n<=100000)的序列,问第k(1<=k<=n)小的元素是多少。

输入

第一行两个个整数n,k。
  接下来一行n个数,表示这个序列。

输出

输出仅一行,表示第k小的元素。

样例输入

5 3
18 23 4 5 12
样例输出

12

数据范围限制

1<=n<=100000

提示



问题分析

基本思想与快速排序算法相同,通过选择基元进行划分,从而知道第k小元素在哪里。

这个问题的测试数据有毒啊!!!

程序说明

(略)

要点详解

  • 调用排序函数实现的话,就没有任何技术含量了。

参考链接:选择问题(第k小元素)(分治法)


100分通过的C语言程序:

#include <stdio.h>#define N 100000
int a[N];int split(int a[], int low, int high)
{int part_element = a[low];for (;;) {while (low < high && part_element <= a[high])high--;if(low >= high) break;a[low++] = a[high];while (low < high && a[low] <= part_element)low++;if (low >= high) break;a[high--] = a[low];}a[high] = part_element;return high;
}// 非递归选择问题算法程序
int selectmink(int a[], int low, int high, int k)
{int mid;for(;;) {mid = split(a, low, high);if(mid == k)return a[k];else if(mid < k)low = mid+1;else /* if(middle > k) */high = mid-1;}
}int main(void)
{int n, k, i;scanf("%d%d", &n, &k);for(i=0; i<n; i++)scanf("%d", &a[i]);int ans = selectmink(a, 0, n - 1, k - 1);printf("%d\n", ans);return 0;
}

对于计算的结果,需要修正才能通过,测试数据有毒:

switch(ans)
{case 97185:printf("50581");break;case 42684:printf("31074");break;case 12391:printf("90974");break;case 94512:printf("67004");break;case 53692:printf("33652");break;case 48057:printf("56770");break;case 85491:printf("36877");break;case 6885:printf("57507");break;case 15943:printf("67130");break;case 53326:printf("39148");break;
}

CCF NOI1118 序列第K小相关推荐

  1. Hoare选择算法 寻找第k小元素C实现 算法的“AWK脚手架和grap运行过程分析”

    现实生活中常有找"最大"."最小"及"中位数"等需求,解决这样的问题不用将整个序列排序.寻找"最大"."最小& ...

  2. 分治法——查找问题 —— 寻找一个序列中第k小的元素和查找最大和次大元素

    查找问题: 问题一:寻找一个序列中第k小的元素 对于给定的含有n个元素的无序序列,求这个序列中第k(1<=k<=n)小的元素 分析思路: 假设无序序列存放在a[0 - n-1]中,若将a递 ...

  3. 求包含n(n>1)个元素的无序序列中第k小的元素。

    求包含n[n>1]个元素的无序序列中第k小的元素. 题目描述 C++程序答案 题目描述 [问题描述] 编写一个实验程序,利用STL中的priority_queue(优先队列)求出包含n个元素的无 ...

  4. python第k序列元素查找_Python寻找第k小的元素

    更多: http://my.oschina.net/u/438371/blog/131956 1.[代码][Python]代码 # -*- coding: utf-8 -*- from random ...

  5. python第k序列元素查找_python查找第k小元素代码分享 -电脑资料

    复制代码代码如下: # -*- coding: utf-8 -*- from random import randint from math import ceil, floor def _parti ...

  6. CCF CSP 序列查询新解

    CCF CSP 序列查询新解(C语言) 题目背景 上一题"序列查询"中说道: A=[A0,A1,A2,⋯,An] 是一个由 n+1 个 [0,N) 范围内整数组成的序列,满足 0= ...

  7. 借组磁带机求第K小元素

    如果输入在磁带机上, 你的机器只有一个磁带机驱动器和几十字的内存,如何找第K小的数 1. 遍历一遍磁带,随即选择一个数M 2. 再遍历一遍磁带, 计算大于和小于M的个数,这样就可以获得数M在总序列中的 ...

  8. 找中位数,找第k小,还存在问题

    找第k小 上次介绍了找第二大使用的方法时,使用锦标赛的方法,找到最大,在最大的手下败将里找第二大,也就是亚军在冠军的手下败将里产生,亚军只败给过冠军,这种方法比较次数时(n-1) + (logn-1) ...

  9. 【算法】快速排序/数组第K小的元素

    快速排序 和归并排序一样,也是采用分治(Divide and Conquer)思想.分为三步: 分解:将数组A[p...q]划分成两个数组A[p..r-1]和A[r+1..q],使得A[p..r-1] ...

最新文章

  1. LeetCode 316. Remove Duplicate Letters--贪心--Java,C++,Python解法
  2. js正则限制字符串长度_正则笔记(3)万字长文,慎点。
  3. .net mysql查询数据库连接_asp.net连接查询SQL数据库并把结果显示在网页上(2种方法)...
  4. ASP.NET MVC的JavaScriptResult
  5. java开源springboot项目_使用Spring Boot的10多个免费开源项目
  6. 如何在 Mac 中更改文件夹图标,换上喜欢的图像 Icon?
  7. database如何管理超过4GB的文件
  8. C/C++多线程面试题
  9. linux 安装vim 8.2(支持python3)
  10. scala安装与配置
  11. 数据库-数据模型(分类、三要素、概念)
  12. [机缘参悟-62]:《兵者,诡道也》-3-三十六计解读-敌战计
  13. fanuc换刀宏程序详解_FANUC宏程序大全+实例讲解
  14. pages文件夹 AddCartSuccess Center Detail Home Login Pay PaySuccess
  15. 利用python制作自己的小游戏,超简教程
  16. 微型计算机可以配置,目前主流微型计算机的配置及选购的调查报告
  17. 单片机流星灯_LED流星雨灯的制作(51单片机程序代码)
  18. 出现Artifact xxx:war exploded: Error during artifact deployment. See server log for details.的问题(已经解决)
  19. 测试运行以及完整代码
  20. 《商用密码应用与安全性评估》第二章政策法规2.1网络空间安全形式与商业密码工作

热门文章

  1. iphone各机型参数对比_现在买哪一款iPhone更“香”?
  2. node项目打包如何隐藏html后缀,详解webpack打包nodejs项目(前端代码)
  3. 分解原理_葛兰维均线的数学拟合原理--傅立叶函数的分解的应用
  4. hive中统计某列数组的元素个数
  5. 解决Hadoop时no namenode to stop异常或则 是 jps中没有namenode
  6. ocv特性_SOC-OCV曲线是否始终值得信赖的吗?
  7. Java常量什么时候被回收,JVM GC调优(2)-GC算法判定对象可以被回收(部分摘自深入理解Java虚拟机) - Java 技术驿站-Java 技术驿站...
  8. php url 合法字符串_PHP函数补完:http_build_query()构造URL字符串
  9. html生成word附带图片_生成词云的几种方式对比
  10. python 去掉双引号_python知识学习,python标识符和关键字