题意:

给一个0和1组成的序列a,要构造一个相同长度的序列b。b要满足非严格单调,且

值为0到1的实数。最后使得  sum((ai-bi)^2)最小。

算法:

首先a序列開始的连续0和末尾的连续1是能够不考虑的。

由于仅仅要b序列相应开头为0、

末尾为1,既不影响单调性又能使相应的(ai-bi)^2=0。

然后,

先找111100、11100、10这样以1開始以0结束的序列块。每一块相应的b值相等且均为

这一块的平均值,即1的个数/0和1的总个数。

可是要满足b的单调性,则我们用栈来维护,假设后面一块的均值<前面一块的均值,则

合并这两块。也就是仅仅要栈顶的块的均值小于要压入栈的块的均值,就一直合并,直到

满足单调性。再把当前的值压入栈。

最后仅仅要一块块统计相应的sum((ai-bi)^2)就是答案了。

逗逼记忆---->比赛的时候我没有想到块,仅仅想到除去前面的0和后面的1。中间的值都是一样。

用二分或者三分解决,仅仅要控制精度=。

=

P.S:   这题必须注意细节,否则极易丢失精度。主要是我代码凝视的两个我開始没有控制好的地方。

o(╯□╰)o

#include<cstdio>
#include<iostream>
#include<cstring>
#define maxn 100010
using namespace std; struct node
{
double num,v; //v表示1的个数,num表示0和1的总个数
};
node stk[maxn];
double sum[maxn],a[maxn]; int main()
{
int T,n;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
memset(sum,0,sizeof(sum));
for(int i=1;i<=n;i++)
{
scanf("%lf",&a[i]);
sum[i] = sum[i-1]+a[i];
}
int i = 1,k = n;
while(a[i]==0) i++;
while(a[k]==1) k--;
int top = 0,le = i;
node x,y;
for(;i<=k;i++)
{
if(a[i]==0)
{
while(a[i]==0 && i<=k) //这里假设不加控制i<=k,i可能超出k
i++;
double a = sum[i-1]-sum[le-1];
double b = (double)i-le;
while(top>0 && a/b<stk[top].v/stk[top].num) //这里也不能忘了top>0
{
y = stk[top--];
a += y.v;
b += y.num;
}
x.v = a;
x.num = b;
stk[++top] = x;
le = i;
}
}
double ans = 0;
while(top)
{
y = stk[top--];
double val = y.v/y.num;
ans += (1-val)*(1-val)*y.v + val*val*(y.num-y.v);
}
printf("%.6lf\n",ans);
}
return 0;
}

hdu 4923 Room and Moor (单调栈+思维)的更多相关文章

  1. HDU 4923 Room and Moor (单调栈)

    题意: 给你一个A数列,让你求一个单调递增的B数列(0<=bi<=1),使得sum{(ai-bi)^2}最小. 思路: 很明显,如果A = 0...01...1,那么bi=ai即可. 可以 ...

  2. HDU 4923 Room and Moor(推理+栈维护)

    HDU 4924 Room and Moor 题目链接 题意:给定一个01组成的a序列.要求一个b序列,b序列每一个数值为[0, 1]之间的数,而且b序列为非递减序列,要求∑(ai−bi)2最小,求这 ...

  3. HDU 5875 H - Function 用单调栈水过了

    http://acm.hdu.edu.cn/showproblem.php?pid=5875 单调栈,预处理to[i]表示第一个比a[i]小的数字,一直跳就可以. 这题是数据水而已. 这里学习下单调栈 ...

  4. hdu 5696 区间的价值 单调栈+rmq

    区间的价值 Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Problem D ...

  5. codeforces 817 D. Imbalanced Array(单调栈+思维)

    题目链接:http://codeforces.com/contest/817/problem/D 题意:给你n个数a[1..n]定义连续子段imbalance值为最大值和最小值的差,要你求这个数组的i ...

  6. 2019牛客暑期多校训练营(第八场)A-All-one Matrices(单调栈+思维)

    >传送门< 题意:给你一个01矩阵,求出所有不可扩大的全为1的矩阵的个数 思路:比赛的时候想到了用单调栈,但是也只是想到了,并不知道怎么用,其实和之前求二维01矩阵中全为1的矩阵最大面积非 ...

  7. HDU 4923 Room and Moor (多校第六场C题) 单调栈

    Problem Description PM Room defines a sequence A = {A1, A2,..., AN}, each of which is either 0 or 1. ...

  8. hdu 4923 Room and Moor [ 找规律 + 单调栈 ]

    传送门 Room and Moor Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Oth ...

  9. HDU 4923 Room and Moor

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4923 解题报告:给出一个长度为n的只包含0和1的序列,是否存在一个序列Bi满足一下条件: 1.     ...

随机推荐

  1. edmx文件

    MethodBase 提供有关方法的信息 在System.Reflector命名空间之下 edmx edmx:Runtime节点下包含与EF有关的定义与映射信息 edmx:ConceptualMode ...

  2. (转)IIS5.1的安装配置并发布ASP.NET网站

    最近跟老师做一个桥梁养护系统的项目,要求用VS2008+Sql Server2000,服务器用IIS.由于之前做过的ASP.NET项目都是用的VS内置的服务器,并没有使用过IIS,第一次搭,花了几个小 ...

  3. 《第一行代码》学习笔记8-活动Activity(6)

    1.返回上一个活动只需要按一下Back键,还有一个startActivityForResult()方法也是 用于启动活动,这个方法期望在活动销毁时能够返回一个结果给上一个活动. 2.startActi ...

  4. 1、Spark 通过api,hfile两种形式获取hbase数据,简单样例

    pom内容: <dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-se ...

  5. SimpleDateFormat的部分方法

    1,语法格式:new SimpleDateFormat("yyyy-MM-dd HH:mm") parse:String-->Date format:Date-->St ...

  6. UWP开发小记

    针对个人的上一篇文章中提到的遇到的几个问题,做一下个人解答 DLL部署的问题,可以将DLL添加到工程中,属性中设置content为true,这样,部署目录下就会有这个文件. 需要说明的是,这个文件确实 ...

  7. Ruby和Rails开发环境安装

    更新包管理 sudo apt-get update 安装curl sudo apt-get install curl *安装rvm via curl \curl -L https://get.rvm. ...

  8. SharpZipLib 压缩文档下载

    using ICSharpCode.SharpZipLib.Zip; Response.Clear(); Response.ClearContent(); Response.ClearHeaders( ...

  9. git命令收集整理

    git init # 初始化本地git仓库(创建新仓库) git config --global user.name "xxx" # 配置用户名 git config --glob ...

  10. Windows Server 2003 SP2企业版ISO下载, windows2003系统下载,2003系统下载,2003系统

    Windows Server 2003 SP2 企业版ISO下载(真正企业免激活版) 此版本适合作为一个新系统来安装,也适合在虚拟机中安装 点评:Windows Server 2003 SP2 企业版 ...