题意:

给你一堆无序数,寻找它的一个子堆,使得子堆的平均数减中位数最大。

数字的个数n<=2e5 0<=xi<=1e6.

思路:

首先可以证明这堆数一定是奇数个,证明方法是尝试在奇数个的有序数列中加入一个数字求平均值和中位数各增加了多少。然后比较一下。

也可以考虑偶数个的序列去掉中间两个中较大的数,差值不会减小。

所以中位数一定是原先堆里的数,我们可以枚举每一个数,然后二分查找范围。

二分查找范围的原理是,随着字串长度的增加,那么差值是先增大后减小的,所以我们枚举某点和它相邻的点的斜率(大小关系),然后进行二分处理,寻找最大值。

坑点:

浮点数如果需要除法比较,把等式两边同时乘上除数的最大公约数,否则会有精确度的问题。

#include<bits/stdc++.h>
using namespace std;
double jilu[];
double bf[];
double tans=;
int pos=,len=,cet;
double ans;
int n;
double average(int m){
double sum=bf[cet+]-bf[cet-m]+bf[n]-bf[n-m];
return sum;
}
void bSearch(int l,int r){
int m;
int tmpr=r;
while(l<=r){
int m=(l+r)>>;
if(average(m)*(*(m+)+)>=average(m+)*(*m+))r=m-;
else l=m+;
}
for(int i=max(,l-);i<=min(l+,tmpr);i++){//二分不一定查找到最大的点,所以进行下调整
if(average(i)-jilu[cet]*(*i+)>tans*(*i+)){
tans=average(i)/(*i+)-jilu[cet];
pos=cet;
len=i;
}
}
}
int main()
{
scanf("%d",&n);
for(int i=;i<n;i++){
scanf("%lf",&jilu[i]);
}
sort(jilu,jilu+n);
for(int i=;i<=n;i++){
bf[i]=bf[i-]+jilu[i-];
}
for(int i=;i<n;i++){
cet=i;
bSearch(,min(i,n--i));
}
//printf("%d %d\n",pos,len);
printf("%d\n",*len+);
for(int i=pos;i>=pos-len;i--){
printf("%.0lf ",jilu[i]);
}
for(int i=n-;i>n--len;i--){
printf("%.0lf ",jilu[i]);
}
}

Codeforces 626E Simple Skewness 「数学」「二分」的更多相关文章

  1. Codeforces 626E Simple Skewness(暴力枚举+二分)

    E. Simple Skewness time limit per test:3 seconds memory limit per test:256 megabytes input:standard ...

  2. codeforces 626E. Simple Skewness 三分

    题目链接 给n个数, 让你去掉一些数, 使得剩下的数的平均值-中位数的差值最大. 先将数组排序, 然后枚举每一个数作为中位数的情况, 对于每个枚举的数, 三分它的左右区间长度找到一个平均值最大的情况, ...

  3. Codeforces 665D Simple Subset [简单数学]

    题意: 给你n个数,让你从中选一个子集要求子集中的任何两个数相加都是质数. 思路: 一开始把自己坑了,各种想,后来发现一个简单的性质,那就是两个数相加的必要条件是这两个数之中必定一个奇数一个偶数,(除 ...

  4. 洛谷 P4714 「数学」约数个数和 解题报告

    P4714 「数学」约数个数和 题意(假):每个数向自己的约数连边,给出\(n,k(\le 10^{18})\),询问\(n\)的约数形成的图中以\(n\)为起点长为\(k\)的链有多少条(注意每个点 ...

  5. 「kuangbin带你飞」专题二十二 区间DP

    layout: post title: 「kuangbin带你飞」专题二十二 区间DP author: "luowentaoaa" catalog: true tags: - ku ...

  6. 「kuangbin带你飞」专题十九 矩阵

    layout: post title: 「kuangbin带你飞」专题十九 矩阵 author: "luowentaoaa" catalog: true tags: mathjax ...

  7. 「CF779B」「LOJ#10201.」「一本通 6.2 练习 4」Sherlock and His Girlfriend(埃氏筛

    题目描述 原题来自:Codeforces Round #400 B. Sherlock 有了一个新女友(这太不像他了!).情人节到了,他想送给女友一些珠宝当做礼物. 他买了 nnn 件珠宝.第 iii ...

  8. 精心整理「服务器Linux C/C++」 成长路程(附思维导图)

    前言 我不是名校毕业,更没有大厂的背景,我只是一个毕业不到 2 年的普普通通的程序员,在摸爬滚打的工作这段时间里,深知了有一个「完整的知识体系」是非常重要的.当事人非常后悔没有在大学期间知道这个道理- ...

  9. 「状压DP」「暴力搜索」排列perm

    「状压DP」「暴力搜索」排列 题目描述: 题目描述 给一个数字串 s 和正整数 d, 统计 sss 有多少种不同的排列能被 d 整除(可以有前导 0).例如 123434 有 90 种排列能被 2 整 ...

随机推荐

  1. 一种JavaScript 类的设计模式

    一种JavaScript 类的设计模式尽管前面介绍了如何定义一个类,如何初始化一个类的实例,但既可以在function定义的函数体中添加成员,又可以用prototype 定义类的成员,代码显的很混乱, ...

  2. 持续集成之Jenkins(坏老头)

    点击关注哦↑↑↑↑↑↑↑↑↑ 持续集成 有关持续集成的简介,可参考我此前的文章:http://blog.csdn.net/benkaoya/article/details/44993583 Jenki ...

  3. Oralce开窗函数OVER()的一些应用

    好久没用oracle了,发现很多东西已经忘记.正好今天改写个语句,顺便回忆了一下,乘热整理以备遗忘. over(order by salary) 按照salary排序进行累计,order by是个默认 ...

  4. Word快捷键

    ▲Word快捷键 [F1]键:帮助 [F2]键:移动文字或图形,按回车键确认 [F4]键:重复上一次的操作 [F5]键:编辑时的定位 [F6]键:在文档和任务窗格或其他Word窗格之间切换 [F8]键 ...

  5. mysql 获取设置环境变量

    mysql 获取环境变量 show global variables; 获取指定环境变量 show global variables like '%timeout'; 设置环境变量 set globa ...

  6. POJ 3709 K-Anonymous Sequence

    题目大意:将一个升序的,有N个元素的序列,分组.要求每组的元素不少于K个,计算出组内各元素与最小元素的之差的和,将每组的这个值加起来,其和要最小. N<500000,K<N 分析: dp[ ...

  7. SQL server 学习笔记1

    1.查询安装的排序规则选项喝当前的排序规则服务器属性 select * from fn_helpcollations(); 2.查看当前服务器的排序规则 select serverproperty(' ...

  8. ADF_Starting系列4_使用ADF开发富Web应用程序之维护User Interface(Part1)

    2014-05-04 Created By BaoXinjian

  9. React Native 开发。

    1.react-native run-android 安装 2.react-native start  开启调试端口

  10. 图片--android 图片占用内存与什么有关

    原文链接:http://blog.csdn.net/zjl5211314/article/details/7041813 在开发手机应用的时候,内存是有限的,那使用的时候,就要合理的运用和释放. 那么 ...