题目

描述

题目大意

有一堆长为222的矩形,最下面的右端点横坐标为000。

每个矩形都有其固定的质量。

将这些矩形堆在一起,使得最右边的横坐标最大,并且满足它不会塌掉(满足物理学)。


思考历程

首先就觉得这是一道结论题。

这个东西看起来不可以DP做,所以就往贪心的方面想。

我想从上往下推过来,计算出可能的最左和最右的重心的位置。

在计算的时候记录一下最右边的点。

实际上我的这个想法存在着太多的漏洞,以至于我连样例也没有过。


正解

首先,最优的方案一定是长成“>>>”形状的。

接下来我们枚举这个凸出来的矩形,设其为xxx。

在xxx下面的尽量往右伸,在xxx上面的往左伸。右伸是为了使得答案尽量大,左伸是为了让答案尽量大的时候可以保持平衡。

现在我们需要让xxx以及它上面的矩形可以立足于x−1x-1x−1的矩形上。

由于xxx要尽量往右,那我们就钦定这一大块的重心在rx−1r_{x-1}rx−1​处(rir_iri​表示iii矩形的右边横坐标)

又由于xxx上面的矩形要往左,所以我们就钦定它们的重心在rx−2r_x-2rx​−2上(一定有满足这种条件的方案)。

设MMM为xxx上面的矩形的质量和,mxm_xmx​为xxx的质量,依照公式:

rx−1=M(rx−2)+mx(rx−1)M+mxr_{x-1}=\frac{M(r_x-2)+m_x(r_x-1)}{M+m_x}rx−1​=M+mx​M(rx​−2)+mx​(rx​−1)​

如果我们知道rx−1r_{x-1}rx−1​,就可以解出rxr_xrx​,然后统计入答案。

那这个rx−1r_{x-1}rx−1​是怎么来的呢?

显然不可以有上一次i=x−1i=x-1i=x−1时解出来的结果,具体原因不在赘述。

转化成另一个问题,现在xxx不是最右边的矩形,最右边的矩形会出现在它的上方。

所以xxx上面的矩形要尽量往右伸,我们可以将它们的重心钦定为rxr_xrx​,然后方程就出来了。

rx−1=Mrx+m(rx−1)M+mzr_{x-1}=\frac{Mr_x+m(r_x-1)}{M+m_z}rx−1​=M+mz​Mrx​+m(rx​−1)​

同样可以通过rx−1r_{x-1}rx−1​解出rxr_xrx​,解出之后用来更新现在的rx−1r_{x-1}rx−1​,计算下一个答案。

时间显然是线性的。


代码

using namespace std;
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 300010
int n;
int w[N];
int main(){
scanf("%d",&n);
double sum=0;
for (int i=1;i<=n;++i)
scanf("%d",&w[i]),sum+=w[i];
sum-=w[1];
double r=0,ans=0;
for (int i=2;i<=n;++i){
sum-=w[i];
ans=max(r+1+sum/(sum+w[i]),ans);
r=r+w[i]/(sum+w[i]);
}
printf("%.8lf\n",ans);
return 0;
}

总结

在贪心的时候,有时可以“钦定”一下,假设除最好的情况来计算。

[JZOJ3171] 【GDOI2013模拟4】重心的更多相关文章

  1. jzoj3156. 【GDOI2013模拟1】病毒传播

    题意: 村庄里有m个人,初始有一些人感染了病毒.如果第i个人的编号i满足,有一对(a,b)(a是初始病毒感染者编号,b为前一天的感染者编号)使\(a*b mod m =i\),则第i个人会感染病毒.每 ...

  2. 【GDOI2013模拟4】贴瓷砖

    题目 A镇的主街是由N个小写字母构成,镇长准备在上面贴瓷砖,瓷砖一共有M种,第i种上面有Li个小写字母,瓷砖不能旋转也不能被分割开来,瓷砖只能贴在跟它身上的字母完全一样的地方,允许瓷砖重叠,并且同一种 ...

  3. [JZOJ3168] 【GDOI2013模拟3】踢足球

    题目 描述 题目大意 有两个队伍,每个队伍各nnn人. 接到球的某个人会再下一刻随机地传给自己人.敌人和射门,射门有概率会中. 每次射门之后球权在对方111号选手. 某个队伍到了RRR分,或者总时间到 ...

  4. [JZOJ3167] 【GDOI2013模拟3】查税

    题目 描述 题目大意 维护一个有一次函数组成的序列 具体来说,对于位置xxx,现在的值为sx+zx∗(T−tx)s_x+z_x*(T-t_x)sx​+zx​∗(T−tx​) 有两个操作,修改某个位置上 ...

  5. [JZOJ3177] 【GDOI2013模拟5】安全监控

    题目 描述 (样例都懒得发出来了) 题目大意 给你一个有向图,从111号点出发,绕一圈回来.这一圈中必须经过222号点. 问经过的最少的点数(不重复). 思考历程 一看就觉得是一道神题. 然后仔细观察 ...

  6. [JZOJ3187]【GDOI2013模拟8】的士

    题目 描述 题目大意 在一个数轴上,有些人要从某个点到达另一个点. 出租车从最左端出发,将所有人送到它们的目的地,最终到达最右边的点. 出租车只能做一个乘客,并且可以在图中将乘客丢下. 问最短时间. ...

  7. 不熟,不会,未a的题列表

    不熟: jzoj5968. 电竞选手(不知道公式如何得来) jzoj4877. [NOIP2016提高A组集训第10场11.8]力场护盾 (对向量不熟悉,不知道为什么结果要取反) jzoj4867. ...

  8. 【CSP模拟赛】仔细的检查(树的重心&树hash)

    题目描述 nodgd家里种了一棵树,有一天nodgd比较无聊,就把这棵树画在了一张纸上.另一天nodgd更无聊,就又画了一张.  这时nodgd发现,两次画的顺序是不一样的,这就导致了原本的某一个节点 ...

  9. hdu-1115 计算几何 求重心 凸多边形 面积

    思想是分割成三角形,然后求三角形的重心.那么多边形重心就是若干个三角形的重心带权求中心,可以用质点质心公式. #include <cstdio> #include <iostream ...

随机推荐

  1. SSDT

    2.系统服务调度表SSDT及SSSDT Shadow 系统服务:由操作系统提供的一组函数(内核函数),API可以间接或者直接的调用系统服务.操作系统以动态链接库(DLL)的形式提供API. SSDT: ...

  2. DXP 常用功能

    1. PCB布板篇 t+s: 从原理图对应到pcb图中 F11: 修改顶层,底层信息 v+f: 回到PCB板中 i+l: 放置到画的矩形框内 对齐功能: ctrl + shift + t: 顶部对齐 ...

  3. 20140331 HOG代码调试 Boost库安装

    1.CUDAHOG代码调试 错误1: 错误提示:(main.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall cudaHOG::cudaH ...

  4. seo具备的条件

    对于SEO这行业,许多想学习这一行,但是并非每一个人都有这样才能.因为SEO份这行靠是真材实料并非虚拟人才.现在找到高工资的SEO人才需要 有三年以上经验,熟悉PHP.html.asp.java等等这 ...

  5. 深入理解 js为什么没有函数重载,如何实现函数重载?

    我的新博客 http://www.suanliutudousi.com/2017/08/24/%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3-js%E4%B8%BA%E4%B ...

  6. Markdown 语法大全

    1 强调 星号与下划线都可以,单是斜体,双是粗体,符号可跨行,符号可加空格 **一个人来到田纳西** __毫无疑问__ *我做的馅饼 是全天下* _最好吃的_ 效果: 一个人来到田纳西 毫无疑问 我做 ...

  7. <爬虫实战>豆瓣电影TOP250(三种解析方法)

    1.豆瓣电影排行.py # 目标:爬取豆瓣电影排行榜TOP250的电影信息 # 信息包括:电影名字,上映时间,主演,评分,导演,一句话评价 # 解析用学过的几种方法都实验一下①正则表达式.②Beaut ...

  8. vue中解决拖动和点击事件的冲突

    BUG说明: 鼠标上下方向拖拽,如果松开时鼠标位于悬浮按钮上会默认执行click事件,经验证,click事件与mouse事件的执行顺序为onmousedown =>onmouseup => ...

  9. 未知高宽的div在其父级div中垂直居中显示

    (一)如果已知子div的高宽 .father { position: relative; } .child { width: 100px; height: 80px; position: absolu ...

  10. pandas中axis的含义

    定义一个dataframe: >>> df a b0 1 31 2 4 现在看两种用法: 1.求行的均值 >>> df.mean(axis=1)0 2.01 3.0 ...