Codeforces 626E Simple Skewness 「数学」「二分」
题意:
给你一堆无序数,寻找它的一个子堆,使得子堆的平均数减中位数最大。
数字的个数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 「数学」「二分」的更多相关文章
- Codeforces 626E Simple Skewness(暴力枚举+二分)
E. Simple Skewness time limit per test:3 seconds memory limit per test:256 megabytes input:standard ...
- codeforces 626E. Simple Skewness 三分
题目链接 给n个数, 让你去掉一些数, 使得剩下的数的平均值-中位数的差值最大. 先将数组排序, 然后枚举每一个数作为中位数的情况, 对于每个枚举的数, 三分它的左右区间长度找到一个平均值最大的情况, ...
- Codeforces 665D Simple Subset [简单数学]
题意: 给你n个数,让你从中选一个子集要求子集中的任何两个数相加都是质数. 思路: 一开始把自己坑了,各种想,后来发现一个简单的性质,那就是两个数相加的必要条件是这两个数之中必定一个奇数一个偶数,(除 ...
- 洛谷 P4714 「数学」约数个数和 解题报告
P4714 「数学」约数个数和 题意(假):每个数向自己的约数连边,给出\(n,k(\le 10^{18})\),询问\(n\)的约数形成的图中以\(n\)为起点长为\(k\)的链有多少条(注意每个点 ...
- 「kuangbin带你飞」专题二十二 区间DP
layout: post title: 「kuangbin带你飞」专题二十二 区间DP author: "luowentaoaa" catalog: true tags: - ku ...
- 「kuangbin带你飞」专题十九 矩阵
layout: post title: 「kuangbin带你飞」专题十九 矩阵 author: "luowentaoaa" catalog: true tags: mathjax ...
- 「CF779B」「LOJ#10201.」「一本通 6.2 练习 4」Sherlock and His Girlfriend(埃氏筛
题目描述 原题来自:Codeforces Round #400 B. Sherlock 有了一个新女友(这太不像他了!).情人节到了,他想送给女友一些珠宝当做礼物. 他买了 nnn 件珠宝.第 iii ...
- 精心整理「服务器Linux C/C++」 成长路程(附思维导图)
前言 我不是名校毕业,更没有大厂的背景,我只是一个毕业不到 2 年的普普通通的程序员,在摸爬滚打的工作这段时间里,深知了有一个「完整的知识体系」是非常重要的.当事人非常后悔没有在大学期间知道这个道理- ...
- 「状压DP」「暴力搜索」排列perm
「状压DP」「暴力搜索」排列 题目描述: 题目描述 给一个数字串 s 和正整数 d, 统计 sss 有多少种不同的排列能被 d 整除(可以有前导 0).例如 123434 有 90 种排列能被 2 整 ...
随机推荐
- php 开启COM组件
1.先到PHP.INI中打开COM选项,com.allow_dcom = true 2.我这里的环境是PHP5.4.7,PHP 5.4.5后,com/dotnet 模块已经成了单独的扩展,所以需要在P ...
- form表单元素类型
<form> <input type="text"> <input type="password"> <input t ...
- Rest Client(Rest接口调试工具,有保存功配置功能) chrome浏览器插件
Rest Client(Rest接口调试工具,有保存功配置功能) chrome浏览器插件 下载地址 插件的操作很简单,下面是一些简单的实例. 1.安装 在谷歌应用商城搜索postman,如下图1-1所 ...
- MySQL Binlog 【ROW】和【STATEMENT】选择(转)
前言: 二进制日记录了数据库执行更改的操作,如Insert,Update,Delete等.不包括Select等不影响数据库记录的操作,因为没有对数据进行修改.二进制主要的功能有:复制(Re ...
- wap图片滚动特效_无css3 元素js脚本编写
手机图片滑动切换,网上有很多这样的例子,但都借助于其他组件,让代码混乱的不行:还有就是用到css3里的 transform:translate(x,y);移动元素,不过发现在不支持css3的设备上马上 ...
- jsPlumb 学习笔记
介绍 使用svg完成画图,四个概念: anchor: endpoint在的位置,可通过name访问 endpoint:connection的一端节点,通过addPoint makeSource, co ...
- [navicat] Navicat for Oracle Cannot load OCI DLL
1. 本地安装的是64位的Oracle,但由于Navicat仅支持32位的,因此我们还需下载一个32位的客户端. 2.
- 用javacsv API 来操作csv文件
javacsv是国外开发的一个比较好的操作csv文件的API,这里简单讲一下用法. 先下载javacsv2.0.zip的文件,解压后,把javacsv.jar 添加到项目中. 本站下载地址: htt ...
- 【linux】常见的网络管理命令
last:查看目前和过去的用户登录信息 [root@paulinux ~]# last root pts/0 192.168.1.106 Fri Jun 10 09:53 still logged i ...
- js为DIV动态设置id属性
<script> var objs=document.getElementById("iproduct").getElementsByTagName("div ...