ACdream OJ 1099 瑶瑶的第K大 --分治+IO优化
这题其实就是一个求数组中第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优化的更多相关文章
- ACdream 1099——瑶瑶的第K大——————【快排舍半,输入外挂】
瑶瑶的第K大 Time Limit:2000MS Memory Limit:128000KB 64bit IO Format:%lld & %llu Submit Status ...
- [ACdream 1099] 瑶瑶的第K大
瑶瑶的第K大 Time Limit: 4000/2000MS (Java/Others) Memory Limit: 256000/128000KB (Java/Others) Problem Des ...
- ACdream 1099求第k大
题目链接 瑶瑶的第K大 Time Limit: 10000/5000MS (Java/Others)Memory Limit: 512000/256000KB (Java/Others) Submit ...
- ACdream 1104 瑶瑶想找回文串(SplayTree + Hash + 二分)
Problem Description 刚学完后缀数组求回文串的瑶瑶(tsyao)想到了另一个问题:如果能够对字符串做一些修改,怎么在每次询问时知道以某个字符为中心的最长回文串长度呢?因为瑶瑶整天只知 ...
- [ACdream]瑶瑶带你玩激光坦克
题目链接:http://acdream.info/contest?cid=1269#problem-B Problem Description 有一款名为激光坦克的游戏,游戏规则是用一个坦克发出激光来 ...
- ACdream 1103 瑶瑶正式成为CEO(树链剖分+费用流)
Problem Description 瑶瑶(tsyao)是某知名货运公司(顺丰)的老板,这个公司很大,货物运输量极大,因此公司修建了许多交通设施,掌控了一个国家的交通运输. 这个国家有n座城市,公司 ...
- acdream 瑶瑶带你玩激光坦克 (模拟)
瑶瑶带你玩激光坦克 Time Limit: 2000/1000MS (Java/Others) Memory Limit: 256000/128000KB (Java/Others) Submi ...
- 瑶瑶GBK好的,UTF-8卡死
请求地址: 开发环境核心 esb : http://10.15.22.120:8866/0203000007/EmpAndDptRelateInfoSync/V1 用gbk可以马上返回. 用utf-8 ...
- B - 瑶瑶带你玩激光坦克
B - 瑶瑶带你玩激光坦克 Time Limit: 2000/1000MS (Java/Others) Memory Limit: 256000/128000KB (Java/Others) S ...
随机推荐
- Angularjs,WebAPI 搭建一个简易权限管理系统 —— Angularjs 前端主体结构(五)
目录 前言 Angularjs名词与概念 Angularjs 基本功能演示 系统业务与实现 WebAPI项目主体结构 Angularjs 前端主体结构 6 Angularjs 前端主体结构 6.1 A ...
- Java中Scanner类和BufferReader类之间的区别
java.util.Scanner类是一个简单的文本扫描类,它可以解析基本数据类型和字符串.它本质上是使用正则表达式去读取不同的数据类型. Java.io.BufferedReader类为了能够高效的 ...
- play framework学习笔记之 模板引擎
模板语法 ${client.name} ${client?.name} 不能确定client是否存在的时候? #{extends /} #{doLayout /}#{get} #{set} 比如 #{ ...
- RHEL7虚拟机实验快照
配置虚拟机连接网络 首先确保NetworkManager服务正常运行 [root@administrator ~]# systemctl status NetworkManager ● Network ...
- 关于ArcGIS10.0中的栅格计算中的函数
版本升级确实很重要,在ArcGIS10.1中计算成功的,在10.0中出了问题. 问题 在进行栅格计算时,计算公式很简单,包括两个Ln函数: "-22.73 + 11.1 * Ln(5) + ...
- Microsoft Dynamics CRM 2013 安装过程 图解
在安装前,先持一下SQL配置管理,将相关的服务打开.(由于在虚拟机里,许多服务需要时才会打开,像Reporting Services需要处理报表时才打开) 注:Analysis Services 登录 ...
- SharePoint 2013 术语和术语集介绍
托管元数据是一个集中管理的术语的分层集合,我们可以定义术语和术语集,然后将其用作 SharePoint Server 2013 中项目的属性.简单的说,术语是一个可与 SharePoint Serve ...
- Sharepoint学习笔记—习题系列--70-573习题解析 -(Q45-Q47)
Question45You create and deploy a custom Web Part.You add the Web Part to a page and receive a run-t ...
- 深入理解Android的startservice和bindservice
一.首先,让我们确认下什么是service? service就是android系统中的服务,它有这么几个特点:它无法与用户直接进行交互.它必须由用户或者其他程序显式的启动.它的优先级比 ...
- 关于在Xcode的OC工程中相对路径失败的原因
Xcode的工程生成的可执行文件不是默认在源文件同一个目录下面的,所以当可执行文件执行的时候,相对路径就不对了. 这一点用终端直接编译执行文件证明了这一点: clang -fobjc-arc -fra ...