洛谷 P2797 Facer的魔法 解题报告
P2797 Facer的魔法
题意:给你n个数,你可以选若干个数,使得平均数减中位数最大
数据范围:\(n \le 10^5\)
原题CF626E
很容易想到枚举一个中位数,但是如果选取的数字的个数是偶数个该怎么办呢?
下面证明选取奇数个时一定可以作为答案
当选取一个数字时,答案为0,所以最优答案不可能小于0,这点很重要
现在,我们假设选取了\(2k\)个有序的数成为了答案
设中位数为\(M_0=\frac{a_k+a_{k+1}}{2}\),平均数为\(A_0=\frac{\sum a}{2k}\)
拿掉一个\(a_{k+1}\)后答案会变差吗
设拿掉一个\(a_{k+1}\)后
\(M_1=a_k,A_1=\frac{\sum a-a_{k+1}}{2k-1}\)
\(\Delta M=M_1-M_0=\frac{a_k-a_{k+1}}{2}\)
\(\Delta A=\frac{A_0-a_{k+1}}{2k-1}\)
现在要证\(\Delta A \ge \Delta M\)
因为最优答案大于0,所以有
\(2 \times A_0 \ge a_k+a_{k+1}\)
继续证明
$\Delta A \ge \Delta M $
\(\Rightarrow \frac{A_0-a_{k+1}}{2k-1}+\frac{a_{k+1}-a_k}{2} \ge 0\)
\(\Rightarrow \frac{2A_0-2a_{k+1}+(2k-1)(a_{k+1}-a_k)}{(2k-1) \times 2} \ge 0\)
\(\Rightarrow a_k-a_{k+1} +(2k-1)(a_{k+1}-a_k) \ge 0\)
这一步用了上面的东西,并把正的分母去掉了
\(\Rightarrow 2 \times (k-1)(a_{k+1}-a_k) \ge 0\)
然而仅仅枚举中位数,就算我们贪心每次选大的数也需要\(O(n^2)\)的时间啊
我们从枚举的中位数的左边第一位和右边最后一位 一位一位的向左多选
因为选取的数字越来越小,所以平均数的增量肯定越来越小,其实这个不那么显然,但是证起来比较麻烦
而大家基本上可以理解理解啦
增量减少,值一定有一个峰顶,这是一个单峰函数,我们可以通过三分法找到这个峰顶
注意在整数域上三分要注意边界问题
我们可以这么写
\(lmid=(l*2+r)/3,rmid=(l+r*2+2)/3\)
Code:
#include <cstdio>
#include <algorithm>
const int N=1e5+10;
double ans=0;int a[N],f[N],n;
double max(double x,double y){return x>y?x:y;}
int min(int x,int y){return x<y?x:y;}
int F(int pos,int len)
{
return f[pos]-f[pos-len-1]+f[n]-f[n-len];
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",a+i);
std::sort(a+1,a+1+n);
for(int i=1;i<=n;i++) f[i]=f[i-1]+a[i];
for(int i=2;i<n;i++)
{
int l=1,r=min(i-1,n-i);
while(l<r)
{
int ll=(l*2+r)/3,rr=(l+r*2+2)/3;
if(F(i,ll)*(rr*2+1)<F(i,rr)*(ll*2+1))
l=ll+1;
else
r=rr-1;
}
ans=max(ans,1.0*F(i,l)/(l*2+1)-1.0*a[i]);
}
printf("%.2lf\n",ans);
return 0;
}
2018.9.6
洛谷 P2797 Facer的魔法 解题报告的更多相关文章
- 洛谷 P2801 教主的魔法 解题报告
P2801 教主的魔法 题目描述 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息组每个英雄看.于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1.2.--.N. ...
- 洛谷_Cx的故事_解题报告_第四题70
1.并查集求最小生成树 Code: #include <stdio.h> #include <stdlib.h> struct node { long x,y,c; ...
- 洛谷 P3802 小魔女帕琪 解题报告
P3802 小魔女帕琪 题目背景 从前有一个聪明的小魔女帕琪,兴趣是狩猎吸血鬼. 帕琪能熟练使用七种属性(金.木.水.火.土.日.月)的魔法,除了能使用这么多种属性魔法外,她还能将两种以上属性组合,从 ...
- 洛谷 P2317 [HNOI2005]星际贸易 解题报告
P2317 [HNOI2005]星际贸易 题目描述 输入输出格式 输入格式: 输出格式: 如果可以找到这样的方案,那么输出文件output.txt中包含两个整数X和Y.X表示贸易额,Y表示净利润并且两 ...
- 洛谷 P2606 [ZJOI2010]排列计数 解题报告
P2606 [ZJOI2010]排列计数 题目描述 称一个\(1,2,...,N\)的排列\(P_1,P_2...,P_n\)是\(Magic\)的,当且仅当对所以的\(2<=i<=N\) ...
- 洛谷1303 A*B Problem 解题报告
洛谷1303 A*B Problem 本题地址:http://www.luogu.org/problem/show?pid=1303 题目描述 求两数的积. 输入输出格式 输入格式: 两个数 输出格式 ...
- 洛谷 P2195 HXY造公园 解题报告
P2195 HXY造公园 题目描述 现在有一个现成的公园,有\(n\)个休息点和\(m\)条双向边连接两个休息点.众所周知,\(HXY\)是一个\(SXBK\)的强迫症患者,所以她打算施展魔法来改造公 ...
- 洛谷 P3084 [USACO13OPEN]照片Photo 解题报告
[USACO13OPEN]照片Photo 题目描述 农夫约翰决定给站在一条线上的\(N(1 \le N \le 200,000)\)头奶牛制作一张全家福照片,\(N\)头奶牛编号\(1\)到\(N\) ...
- 洛谷 P1379 八数码难题 解题报告
P1379 八数码难题 题目描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中.要求解的问题是:给出一种初始布局(初 ...
随机推荐
- 【期望dp 质因数分解】cf1139D. Steps to One
有一种组合方向的考虑有没有dalao肯高抬啊? 题目大意 有一个初始为空的数组$a$,按照以下的流程进行操作: 在$1\cdots m$中等概率选出一个数$x$并添加到$a$的末尾 如果$a$中所有元 ...
- 《JSON笔记之三》---postman中传入json串
1.关于如何使用postman工具,简单的介绍一下, 用户在开发或者调试网络程序或者是网页B/S模式的程序的时候是需要一些方法来跟踪网页请求的,用户可以使用一些网络的监视工具比如著名的Firebug等 ...
- python实现简单分类knn算法
原理:计算当前点(无label,一般为测试集)和其他每个点(有label,一般为训练集)的距离并升序排序,选取k个最小距离的点,根据这k个点对应的类别进行投票,票数最多的类别的即为该点所对应的类别.代 ...
- 转 Ubuntu 下 vim 搭建python 环境 配置
1. 安装完整的vim# apt-get install vim-gnome 2. 安装ctags,ctags用于支持taglist,必需!# apt-get install ctags 3. 安装t ...
- LVM(扩展)
LVM(扩展)======================== [root@aminglinux newdir]# fdisk -l /dev/sdb 磁盘 /dev/sdb:10.7 GB, 107 ...
- 将Mnist手写数字库转化为图片形式 和标签形式
Mnist 数据文件有两种,一种是图片文件,一种是标签文件,那么如何把他们解析出来呢? (1)解析图片文件 可以看出在train-images.idx3-ubyte中,第一个数为32位的整数(魔数,图 ...
- [Hdu4825]Xor Sum(01字典树)
Description Zeus 和 Prometheus 做了一个游戏,Prometheus 给 Zeus 一个集合,集合中包含了N个正整数,随后 Prometheus 将向 Zeus 发起M次询问 ...
- vue 组件轮播联动
组件轮播联动我使用的是 el-carousel 组件,具体代码如下: <el-carousel trigger="click" :interval="3000&qu ...
- Spark&Hive结合起来
1.spark与Hive结合起来 前提:当你spark的版本是1.6.1的时候,你的Hive版本要1.2.1,用别的版本会有问题 我们在做的时候,Hive的版本很简单,我们只需要解压缩,告诉他Hive ...
- HDFS HA(High Availability)高可用性
HDFS HA(High Availability)高可用性 参考文献: 官方文档 全文翻译 Hadoop组件之-HDFS(HA实现细节) 这张图片的个人理解 由于NameNode在Hadoop1只有 ...