【贪心】【堆】Gym - 101775B - Scapegoat
题意:有n个事件,每个事件有一个严重程度,m个人(m>=n),你要让m个人去背锅,每个人只能背一个事件的锅,但是一个事件可以由很多人背。让你使得这m个人所承受的严重程度的方差最小化。
考虑一开始n个人各背一个事件,记录下该初始状态下的ans。然后分配剩下的m-n个人。堆里存储每个事件的严重程度x和当前背锅人数y,按照x*x/y-x*x/(y+1.0)(这个值是该事件当前提供的方差*n-给当前的事件多分配一个人所能提供的方差*n,即给它多分配一个人所能给方差带来的改进量,很容易推出来)从大到小排序,然后依次从堆顶取出元素,把一个人分给这个事件,再放回堆即可,然后对初始状态的ans减去这个值,直到堆顶元素的这个值小于零。
#include<cstdio>
#include<queue>
using namespace std;
const double EPS=0.00000001;
double ave;
struct data{
double x,y,val;
data(const double &x,const double &y){
this->x=x;
this->y=y;
val=x*x/y-x*x/(y+1.0);
}
data(){}
};
bool operator < (const data &a,const data &b){
return a.val<b.val;
}
priority_queue<data>Heap;
int a[200005];
double sqr(const double &x){
return x*x;
}
int T,n,m;
int main(){
//freopen("b.in","r",stdin);
scanf("%d",&T);
for(int zu=1;zu<=T;++zu){
while(!Heap.empty()){
Heap.pop();
}
scanf("%d%d",&n,&m);
ave=0;
for(int i=1;i<=n;++i){
scanf("%d",&a[i]);
ave+=(double)a[i];
}
ave/=(double)m;
double tt=0;
for(int i=1;i<=n;++i){
tt+=sqr((double)a[i]-ave);
}
double ans=tt+sqr(ave)*(double)(m-n);
for(int i=1;i<=n;++i){
Heap.push(data((double)a[i],1.0));
}
for(int i=1;i<=m-n;++i){
data t=Heap.top(); Heap.pop();
if(t.val<EPS){
break;
}
Heap.push(data(t.x,t.y+1.0));
ans-=t.val;
}
printf("Case #%d: %.12f\n",zu,ans/(double)m);
}
return 0;
}
【贪心】【堆】Gym - 101775B - Scapegoat的更多相关文章
- Gym 101775B - Scapegoat - [贪心+优先队列]
题目链接:http://codeforces.com/gym/101775/problem/B Aori is very careless so she is always making troubl ...
- 【贪心+堆】XMU 1584 小明的烦恼
题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1584 题目大意: 给n(n<=100 000)个任务的耗时和截至时间,问最少不能 ...
- BZOJ_2151_种树_贪心+堆+链表
BZOJ_2151_种树_贪心+堆 Description A城市有一个巨大的圆形广场,为了绿化环境和净化空气,市政府决定沿圆形广场外圈种一圈树.园林部门得到指令后,初步规划出n个种树的位置,顺时针编 ...
- BZOJ_2006_[NOI2010]超级钢琴_贪心+堆+ST表
BZOJ_2006_[NOI2010]超级钢琴_贪心+堆+ST表 Description 小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙的 音乐 ...
- BZOJ_1029_ [JSOI2007]建筑抢修_贪心+堆
BZOJ_1029_ [JSOI2007]建筑抢修_贪心+堆 Description 小刚在玩JSOI提供的一个称之为“建筑抢修”的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的入侵者.但是 ...
- 【bzoj4425】[Nwerc2015]Assigning Workstations分配工作站 贪心+堆
题目描述 佩内洛普是新建立的超级计算机的管理员中的一员. 她的工作是分配工作站给到这里来运行他们的计算研究任务的研究人员. 佩内洛普非常懒惰,不喜欢为到达的研究者们解锁机器. 她可以从在她的办公桌远程 ...
- 【bzoj1029】[JSOI2007]建筑抢修 贪心+堆
题目描述 小刚在玩JSOI提供的一个称之为“建筑抢修”的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的入侵者.但是T部落的基地里已经有N个建筑设施受到了严重的损伤,如果不尽快修复的话,这些建 ...
- 【bzoj2802】[Poi2012]Warehouse Store 贪心+堆
题目描述 有一家专卖一种商品的店,考虑连续的n天.第i天上午会进货Ai件商品,中午的时候会有顾客需要购买Bi件商品,可以选择满足顾客的要求,或是无视掉他.如果要满足顾客的需求,就必须要有足够的库存.问 ...
- BZOJ 1724: [Usaco2006 Nov]Fence Repair 切割木板 贪心 + 堆 + 反向思考
Description Farmer John想修理牧场栅栏的某些小段.为此,他需要N(1<=N<=20,000)块特定长度的木板,第i块木板的长度为Li(1<=Li<=50, ...
随机推荐
- .NET中如何自定义配置节点
.NET Framework在web.config或app.config中默认提供了很多种设置,以便能够改变应用程序内嵌组件的行为,例如<connectionStrings>.<ht ...
- 20165320 实验一 java环境的熟悉
实验内容与步骤 一.java开发环境的熟悉 1.建立一个有关自己学号的目录 2.在当前文件下编译一个带包Hello.java文件 3.代码内容 package sq; import java.util ...
- 87.在ModelSim中添加Xilinx ISE仿真库
在ModelSim中添加Xilinx ISE仿真库 说明: l ModelSim一定要安装在不带空格的目录下,即不要安装在“Program Files”目录下.如作者是安装在D:\softwares\ ...
- 建立ARM交叉编译环境 (arm-none-linux-gnueabi-gcc with EABI)【转】
转自:http://lib.csdn.net/article/embeddeddevelopment/60172?knId=886 建立ARM交叉编译环境 (arm-none-linux-gnueab ...
- aarch64_n3
ntp-doc-4.2.8p10-1.fc26.noarch.rpm 2017-03-24 02:07 1.2M fedora Mirroring Project ntp-perl-4.2.8p10- ...
- 一步一步搭建 oracle 11gR2 rac+dg之grid安装(四)【转】
一步一步在RHEL6.5+VMware Workstation 10上搭建 oracle 11gR2 rac + dg 之grid安装 (四) 转自 一步一步搭建 oracle 11gR2 rac+d ...
- SQL语句帮助大全
--删除约束 Status:字段名 alter table Table_1 drop constraint Status; --添加约束 --Status :字段名 t_Pay_Order:表名 默认 ...
- poj1063
题意:有一些珠子排成一圈,珠子有两种颜色:黑和白.每次操作可以调换中间隔着一个珠子的两珠子的位置,给出这个圈子的初始状态,问最终能否通过操作让圈子中所有同色的珠子排在一起,即黑白分开. 分析:分两种情 ...
- 03 Editor plugins and IDEs 编辑器插件和 ide
Editor plugins and IDEs 编辑器插件和 ide Introduction 介绍 Options 选项 Introduction 介绍 This document list ...
- mybatis 控制台打印sql脚本
在mybatis-config.xml文件中加一句 <setting name="logImpl" value="STDOUT_LOGGING" /> ...