这题其实就是一个求数组中第K大数的问题,用快速排序的思想可以解决。结果一路超时。。原来要加输入输出优化,具体优化见代码。

顺便把求数组中第K大数和求数组中第K小数的求法给出来。

代码:

/*
* this code is made by whatbeg
* Problem: 1099
* Verdict: Accepted
* Submission Date: 2014-06-15 00:13:53
* Time: 4340 MS
* Memory: 21212 KB
*/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <cstdlib>
#include <iomanip>
using namespace std;
#define N 1007 //复杂度O(n)
int Max_K(int a[],int low,int high,int k)
{
if(k <= || k > high-low+)
return -;
int flag = low + abs(rand())%(high-low+); //随机选择一个基准点
swap(a[low],a[flag]);
int mid = low;
int cnt = ;
for(int i=low+;i<=high;i++)
{
if(a[i] > a[low]) //遍历,把较大的数放在数组左边
{
swap(a[++mid],a[i]);
cnt++;
}
}
//比基准点大的数的个数为cnt-1
swap(a[mid],a[low]); //将基准点放在左、右两部分的分界处
if(cnt > k)
return Max_K(a,low,mid-,k);
else if(cnt < k)
return Max_K(a,mid+,high,k-cnt);
else
return mid;
} int Min_K(int a[],int low,int high,int k)
{
if(k <= || k > high-low+)
return -;
int flag = low + abs(rand())%(high-low+);
swap(a[low],a[flag]);
int mid = low;
int cnt = ;
for(int i=low+;i<=high;i++)
{
if(a[i] < a[low])
{
swap(a[++mid],a[i]);
cnt++;
}
}
swap(a[mid],a[low]);
if(k < cnt)
return Min_K(a,low,mid-,k);
else if(k > cnt)
return Min_K(a,mid+,high,k);
else
return mid;
} inline int in()
{
char ch;
int a = ;
while((ch = getchar()) == ' ' || ch == '\n');
a += ch - '';
while((ch = getchar()) != ' ' && ch != '\n')
{
a *= ;
a += ch - '';
}
return a;
} inline void out(int a)
{
if(a >= )
out(a / );
putchar(a % + '');
} int a[]; int main()
{
int n,k;
while(scanf("%d%d",&n,&k)!=EOF)
{
getchar();
for(int i=;i<n;i++)
a[i] = in();
int res = Max_K(a,,n-,k);
out(a[res]);
puts("");
}
return ;
}

ACdream OJ 1099 瑶瑶的第K大 --分治+IO优化的更多相关文章

  1. ACdream 1099——瑶瑶的第K大——————【快排舍半,输入外挂】

    瑶瑶的第K大 Time Limit:2000MS     Memory Limit:128000KB     64bit IO Format:%lld & %llu Submit Status ...

  2. [ACdream 1099] 瑶瑶的第K大

    瑶瑶的第K大 Time Limit: 4000/2000MS (Java/Others) Memory Limit: 256000/128000KB (Java/Others) Problem Des ...

  3. ACdream 1099求第k大

    题目链接 瑶瑶的第K大 Time Limit: 10000/5000MS (Java/Others)Memory Limit: 512000/256000KB (Java/Others) Submit ...

  4. ACdream 1104 瑶瑶想找回文串(SplayTree + Hash + 二分)

    Problem Description 刚学完后缀数组求回文串的瑶瑶(tsyao)想到了另一个问题:如果能够对字符串做一些修改,怎么在每次询问时知道以某个字符为中心的最长回文串长度呢?因为瑶瑶整天只知 ...

  5. [ACdream]瑶瑶带你玩激光坦克

    题目链接:http://acdream.info/contest?cid=1269#problem-B Problem Description 有一款名为激光坦克的游戏,游戏规则是用一个坦克发出激光来 ...

  6. ACdream 1103 瑶瑶正式成为CEO(树链剖分+费用流)

    Problem Description 瑶瑶(tsyao)是某知名货运公司(顺丰)的老板,这个公司很大,货物运输量极大,因此公司修建了许多交通设施,掌控了一个国家的交通运输. 这个国家有n座城市,公司 ...

  7. acdream 瑶瑶带你玩激光坦克 (模拟)

    瑶瑶带你玩激光坦克 Time Limit: 2000/1000MS (Java/Others)    Memory Limit: 256000/128000KB (Java/Others) Submi ...

  8. 瑶瑶GBK好的,UTF-8卡死

    请求地址: 开发环境核心 esb : http://10.15.22.120:8866/0203000007/EmpAndDptRelateInfoSync/V1 用gbk可以马上返回. 用utf-8 ...

  9. B - 瑶瑶带你玩激光坦克

    B - 瑶瑶带你玩激光坦克 Time Limit: 2000/1000MS (Java/Others)    Memory Limit: 256000/128000KB (Java/Others) S ...

随机推荐

  1. 利用javascript、php和ajax实现计算器

    计算器和ajax部分: <?php /** * Created by PhpStorm. * User: Administrator * Date: 16-9-2 * Time: 上午9:20 ...

  2. 推荐轻量友好的.NET测试断言工具Shouldly

    Shouldly是一个轻量的断言(Assertion)框架,用于补充.NET框架下的测试工具.Shouldly将焦点放在当断言失败时如何简单精准的给出很好的错误信息. Shouldly在GitHub的 ...

  3. 文科生也能看懂的iptables教程(转载)

    据说还是个MM, 写得很通俗易懂, 还很诙谐, 原文:http://dallascao.com/cn/iptables-tutorial-for-newbies/ 对于斗胆开始玩vps的文科生来讲,i ...

  4. RHEL7文件权限

    本文介绍Linux下的文件权限 操作系统为RHEL7.2_X86_64 可以从以下三种访问方式限制访问权限: 1 只允许用户自己访问 2 允许一个预先指定的用户组中的用户访问 3 允许系统中的任何用户 ...

  5. 使用HyperV虚拟机装系统

    新建虚拟机 新建虚拟机 进行相关参数设置 选择系统安装镜像位置,名称及位置 指定代数一般为1代即可 为虚拟机运行分配内存 创建虚拟硬盘或连接已有虚拟硬盘,并分配硬盘空间 核对创建虚拟机相关信息 安装系 ...

  6. android assets文件夹资源的访问

    1.assets文件夹里面的文件都是保持原始的文件格式 . 2.assets中的文件只可以读取而不能进行写的操作. 3.assets目录下的资源文件不会在R.java自动生成ID,所以读取assets ...

  7. Android使用layer-list实现三面边框

    layer-list可以将多个图片或形状按照顺序层叠起来 <?xml version="1.0" encoding="utf-8"?> <la ...

  8. iOS设计模式简介

    开闭原则: 一个模块的修改,对拓展开放而对修改关闭. 举个例子:有一个类在项目中很多地方被使用了,但是由于需求,想对这个类进行拓展,这里可以使用继承拓展出子类,可以对子类进行修改,尽量不要修改原来的类 ...

  9. 那些Xcode不能错过的插件

    转载来自网络   古人云“工欲善其事必先利其器”,打造一个强大的开发环境,是立即提升自身战斗力的绝佳途径!以下是搜集的一些有力的XCode插件.   1.全能搜索家CodePilot 2.0 你要找的 ...

  10. java注解框架

    我们经常会在java代码里面看到:“@Override”,“@Target”等等样子的东西,这些是什么? 在java里面它们是“注解”. 下面是百度百科的解释:java.lang.annotation ...