题意:

       给你序列A,让你构造序列B然后求出最小的f(A <B),其中A 是0,或者1组成的,而B是[0,1]的实数,f(A,B) = 求和(i从1到n) (Ai - Bi)^ 2.

思路:

      首先有一点很明确,那就是我们可以消除面连续的0,和后面连续的1,一开始我的想法是直接求中间部分的平均数, 然后就前面的连续0不用管,后面的连续1不用管,然后中间的部分就是平均数,结果妥妥的WA了,其实正解是分段处理,分成这样的 111000,10

,1110,1111100000...就是断成一些连续1加连续0组成的小段,然后对于当前的这一段的最优就是当前这段的平均数,但是有一点要注意,题目要求的是非递减顺序,那么如果当前的这一段的平均数比前面的那一段的小,我们就得把一段和上一段合并,合并之后如果还比上上一段小,那么在合并(这个地方可以用一个栈,比较方便写),最后在根据剩下的段数来计算答案,既保证了最小,有保证了上升。



#include<stdio.h>
#include<string.h>
#include<stack>

using namespace
std; typedef struct
{
double
s0 ,s1;
}
NODE; int num[110000];
NODE node[110000]; int main ()
{
int
n ,t ,i ,s11 ,mk;
scanf("%d" ,&t);
while(
t--)
{

scanf("%d" ,&n);
for(
s11 = 0 ,i = 1 ;i <= n ;i ++)
{

scanf("%d" ,&num[i]);
if(
num[i]) s11 ++;
}
for(
mk = n + 1 ,i = 1 ;i <= n ;i ++)
if(
num[i]) {mk = i;break;}
if(
s11 == n || mk == n + 1)
{

puts("0.000000");
continue;
}
int
tt = 0;
double
s1 = 0 ,s0 = 0;
num[n+1] = 1;
for(
i = mk ;i <= n ;i ++)
{
if(
num[i]) s1 ++;
else
s0 ++;
if(!
num[i] && num[i+1])
{

node[++tt].s1 = s1;
node[tt].s0 = s0;
s1 = s0 = 0;
}
}

stack<NODE>st;
NODE xin ,tou;
for(
i = 1 ;i <= tt ;i ++)
{
if(
st.empty())
{

st.push(node[i]);
continue;
}

xin = node[i];
tou = st.top();
double
tp = tou.s1 / (tou.s1 + tou.s0);
double
xp = xin.s1 / (xin.s1 + xin.s0);
if(
xp < tp)
{
while(
1)
{

tou = st.top();
st.pop();
xin.s1 += tou.s1;
xin.s0 += tou.s0;
if(
st.empty())
{

st.push(xin);
break;
}

tou = st.top();
tp = tou.s1 / (tou.s1 + tou.s0);
xp = xin.s1 / (xin.s1 + xin.s0);
if(
xp >= tp)
{

st.push(xin);
break;
}
}
}
else
st.push(node[i]);
}
double
ans = 0;
while(!
st.empty())
{

NODE tou = st.top();
st.pop();
double
tp = tou.s1 / (tou.s1 + tou.s0);
ans += (1 - tp) * (1 - tp) * tou.s1 + tp * tp * tou.s0;
}

printf("%.6lf\n" ,ans);
}
return
0;
}

hdu4923 f(A,B)分段处理的更多相关文章

  1. Linux cut命令

    [root@wang /]# cat /etc/passwd root:x:::root:/root:/bin/bash bin:x:::bin:/bin:/sbin/nologin daemon:x ...

  2. Nmap参数详解

    转自:http://blog.csdn.net/huangwwu11/article/details/20230795 Nmap--networkmapper,网络探测工具和安全/端口扫描器 nmap ...

  3. UVa 100 - The 3n + 1 problem(函数循环长度)

    题目来源:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&pa ...

  4. 多普勒失真信号采样Matlab模拟分析

    多普勒失真信号采样Matlab模拟分析 方案 水声通信指的是使用声信号在水中数据传输. 相对而言.电磁信号在水中吸收严重衰减过快,光信号受水中悬浮颗粒的影响,也无法完毕远距离传输. 这两种信号的传播距 ...

  5. MLDS笔记:浅层结构 vs 深层结构

    深度学习出现之前,机器学习方面的开发者通常需要仔细地设计特征.设计算法,且他们在理论上常能够得知这样设计的实际表现如何: 深度学习出现后,开发者常先尝试实验,有时候实验结果常与直觉相矛盾,实验后再找出 ...

  6. nmap 使用总结

    nmap 网络探测工具 参考链接: https://nmap.org/man/zh/ http://www.360doc.com/content/18/0127/18/52402560_7255744 ...

  7. ping 丢包或不通时链路测试说明【转】

    转自:https://help.aliyun.com/knowledge_detail/40573.html?spm=5176.2020520165.121.d157.4fe170291Qdp4l#W ...

  8. 【bzoj3994】 SDOI2015—约数个数和

    http://www.lydsy.com/JudgeOnline/problem.php?id=3994 (题目链接) 题意 多组询问,给出${n,m}$,求${\sum_{i=1}^n\sum_{j ...

  9. 铁乐学python26_hashlib+configparser+logging模块

    大部份内容摘自博客http://www.cnblogs.com/Eva-J/ hashlib模块算法介绍 Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢? ...

随机推荐

  1. HDu1087 Super Jumping! Jumping! Jumping!

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1087 分析:简单dp:dp[i] = max (dp[i], dp[j] + a[i]) 1 #inc ...

  2. python基础(8)python中is和==的区别详解

    前置知识点 当我们创建一个对象时,我们要知道它内部干了些什么 1.创建了一个随机id,开辟了一片内存地址 2.自动声明了这个对象的类型type 3.给这个对象赋值value 小例子 a = 1 pri ...

  3. C# 应用 - 多线程 6) 处理同步数据之手动同步 AutoResetEvent 和 ManualResetEvent

    1. 类的关系 AutoResetEvent 和 ManualResetEvent 都继承自 System.Threading.EventWaitHandle 类(EventWaitHandle 继承 ...

  4. .Net Core 2.1 升级3.1 问题整理

    随着技术的不断拓展更新,我们所使用的技术也在不断地升级优化,项目的框架也在不断地升级,本次讲解 .net core 2.1  升级到3.1所需要注意的事项: 当项目框架升级后,所有的Nuget引用也会 ...

  5. Codeforces Round #541 F. Asya And Kittens

    题面: 传送门 题目描述: Asya把N只(从1-N编号)放到笼子里面,笼子是由一行N个隔间组成.两个相邻的隔间有一个隔板. Asya每天观察到有一对想一起玩,然后就会把相邻的隔间中的隔板取出来,使两 ...

  6. 文本编辑工具 Vim与压缩打包

    vim一共有3种模式:一般模式.编辑模式和命令模式 一般模式下的移动光标 光标向左移动:h或者向左的方向键 光标向右移动:l或者向右的方向键光标向上移动:k或者向上的方向键光标向下移动:j或者向下的方 ...

  7. 主成分分析 | Principal Components Analysis | PCA

    理论 仅仅使用基本的线性代数知识,就可以推导出一种简单的机器学习算法,主成分分析(Principal Components Analysis, PCA). 假设有 $m$ 个点的集合:$\left\{ ...

  8. C#上机实验(三)

    源码如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespac ...

  9. HTTPS证书通过cert-manager自动获取,部署,续期

    HTTP-01验证和DNS-01验证 使用cert-manager给阿里云的DNS域名授权SSL证书 第一步:安装cert-manager 配置 CRD kubectl apply -f https: ...

  10. Distributed | Raft

    1. 复制状态机 一致性算法是在复制状态机的背景下产生的.在这种方法下,一组服务器的状态机计算相同状态的相同副本,即使某些服务器宕机,也可以继续运行. 复制状态机通常使用复制日志实现,每个服务器存储一 ...