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 整 ...
随机推荐
- redis操作
测试环境redis操作 cd /export/servers/redis-2.8.9/src/./redis-cli -n 0 keys keys(pattern):返回满足给定pattern的所有k ...
- paypal接口对接注意事项
追加:新的设定画面 在paypal对接过程中,会存在return_url和notify两种 分别用pdt和ipn实现 但是对于paypal,大家请注意,真实环境和沙盒测试环境的区别 你可以到www.p ...
- [mysql] MariaDB 10.0.10 GTID复制
一:概念理解: 1.TID:Transaction ID,即Mysql服务器的事务ID号. 2.GTID:Global Transaction ID,全局事务ID,在整个主从复制架构中任何两个事 ...
- Hibernate3回顾-5-简单介绍Hibernate session对数据的增删改查
5. Hibernate对数据的增删改查 5.1Hibernate加载数据 两种:get().load() 一. Session.get(Class arg0, Serializable arg1)方 ...
- RDP setting group policy
RDP setting group policy 1.Login to domain controller and go to Group Policy Management tool2.Click ...
- Python try/except异常处理机制
1. use try, except, finally try: data=open('its.txt','w') print('its..', file=data) except: print('f ...
- Linux下高并发socket最大连接数所受的各种限制
http://blog.csdn.net/guowake/article/details/6615728 1.修改用户进程可打开文件数限制 在Linux平台上,无论编写客户端程序还是服务端程序,在进行 ...
- Mongodb集群搭建及spring和java连接配置记录
一.基本环境: mongdb3.0.5数据库 spring-data-mongodb-1.7.2.jar mongo-java-driver-3.0.2.jar linux-redhat6.3 tom ...
- opacity兼容写法
.opacity{ position: absolute; top: 0px;left: 0px; background: #000; filter:alpha(opacity=50); /* IE ...
- 黄聪:C#图像处理(各种旋转、改变大小、柔化、锐化、雾化、底片、浮雕、黑白、滤镜效果) (转)
一.各种旋转.改变大小 注意:先要添加画图相关的using引用. //向右旋转图像90°代码如下:private void Form1_Paint(object sender, System.Wind ...