Description

传送门

Solution

首先我们肯定不能那么耿直地直接把水混合起来吧。。不然分分钟完球。

那么怎么找到最优解呢?假如我们把水的体积和温度按顺序插入队列,这时我们插入第i天的水。假如这个时候水量超过了L,我们要把前面的部分水排掉。

我们目前有两种排水方法:

1.不断去掉队列的队首(即最开始插入队列的水)

2.选一个位置j,把队列中位置[1,j]的水量按照比例分别减少一部分(就是在第j个位置对应的当天倒掉一部分水)

普通的队列,无法比较方法1,2的优劣。我们考虑单调队列(队列中的水的温度保持单调递增)

由于我们的队列是单调的,显然第1种更优。

那么,插入了第i天的水后,还要确保队列的单调。设当前队列的队尾下标为r。

假如说第i天的水温比r的水温低,那么假如要放水,把i和r混合后放显然会比先放掉r的水再放i的水更优。所以我们把i和r混合起来。

如此直到队列恢复单调。

Code

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#define _v first
#define _t second
using namespace std;
typedef long long ll;
pair<ll,double> q[];
int n,L,t,v;
int l=,r=;
ll pour,all_water=;double degree=;
int main()
{
scanf("%d%d",&n,&L);
for (int i=;i<=n;i++)
{
scanf("%d%d",&t,&v);
while (all_water+v>L)
{
pour=min(q[l]._v,all_water+v-L);
q[l]._v-=pour;
all_water-=pour;
degree-=q[l]._t*pour;
if (!q[l]._v) l++;
}
all_water+=v;degree+=1ll*t*v;
q[++r]=make_pair(v,t);
while (l<r&&q[r]._t<q[r-]._t)
{
q[r-]._t=(q[r]._t*q[r]._v+q[r-]._t*q[r-]._v)/(q[r]._v+q[r-]._v);
q[r-]._v+=q[r]._v;r--;
}
printf("%.7f\n",degree/L);
}
}

[arc072F]Dam-[单调队列]的更多相关文章

  1. 【ARC072F】 Dam 单调队列

    题目大意: 有一个水库,容量为$L$,一开始是空的.有$n$天. 对于第i天,每天早上有$v_i$单位的,水温为$t_i$的水流进来.每天晚上你可以放掉一些水,多少自定.但是必须保证第二天水库不会溢出 ...

  2. BestCoder Round #89 B题---Fxx and game(单调队列)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5945     问题描述 输入描述 输出描述 输入样例 输出样例 题意:中文题,不再赘述: 思路:  B ...

  3. 单调队列 && 斜率优化dp 专题

    首先得讲一下单调队列,顾名思义,单调队列就是队列中的每个元素具有单调性,如果是单调递增队列,那么每个元素都是单调递增的,反正,亦然. 那么如何对单调队列进行操作呢? 是这样的:对于单调队列而言,队首和 ...

  4. FZU 1914 单调队列

    题目链接:http://acm.fzu.edu.cn/problem.php?pid=1914 题意: 给出一个数列,如果它的前i(1<=i<=n)项和都是正的,那么这个数列是正的,问这个 ...

  5. BZOJ 1047 二维单调队列

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1047 题意:见中文题面 思路:该题是求二维的子矩阵的最大值与最小值的差值尽量小.所以可以考 ...

  6. 【BZOJ3314】 [Usaco2013 Nov]Crowded Cows 单调队列

    第一次写单调队列太垃圾... 左右各扫一遍即可. #include <iostream> #include <cstdio> #include <cstring> ...

  7. BZOJ1047: [HAOI2007]理想的正方形 [单调队列]

    1047: [HAOI2007]理想的正方形 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2857  Solved: 1560[Submit][St ...

  8. hdu 3401 单调队列优化DP

    Trade Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status ...

  9. 【转】单调队列优化DP

    转自 : http://www.cnblogs.com/ka200812/archive/2012/07/11/2585950.html 单调队列是一种严格单调的队列,可以单调递增,也可以单调递减.队 ...

  10. hdu3530 单调队列

    Subsequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Tota ...

随机推荐

  1. 使用 Azure CLI 创建 Linux 虚拟机

    Azure CLI 用于从命令行或脚本创建和管理 Azure 资源. 本指南详细介绍了如何使用 Azure CLI 部署运行 Ubuntu 服务器的虚拟机. 服务器部署以后,将创建 SSH 连接,并且 ...

  2. 微信网页IOS上传图片旋转解决方案

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  3. swift版的元组

    swift版的元组 说明 元组的内容并不多,使用的话跟普通变量类似,以下是测试源码: // // ViewController.swift // Tuples // // Created by You ...

  4. [翻译] SACalendar

    SACalendar 效果图: Introducing SACalendar - Easy to use and customizable iOS 7 Calendar SACalendar - 使用 ...

  5. GitBlit集成AD域LDAP

    GitBlit的配置文件: gitlblit安装目录下的 /data/gitblit.properties   ,用记事本或其他编译器打开即可. 集成AD域的LDAP操作步骤 打开配置文件,添加以下内 ...

  6. 铁乐学python_day22_面向对象编程4

    以下内容大部分摘自博客http://www.cnblogs.com/Eva-J/ 封装 [封装]隐藏对象的属性和实现细节,仅对外提供公共访问方式. [好处] 将变化隔离: 便于使用: 提高复用性: 提 ...

  7. springsource-tool-suite插件的在线安装

      1 首先,确定你现在使用的eclipse属于哪个版本? 查看自己的eclipse平台的版本(我的eclipse平台版本是4.3)       2 根据eclipse版本,选择插件的版本 官网:ht ...

  8. December 01st 2016 Week 49th Thursday

    Life is a maze and love is a riddle. 生活是个迷宫,爱情是个谜语. I am lost in both. Can you provide me some guida ...

  9. 【hibernate学习杂记】维护关系的一方和不维护关系的一方的区别与联系

    双向多对一/一对多例子 维护关系一方为User:多方 不维护关系的一方为Group:一方 以下是多方代码: package Hibernate_demo1.Demo8.Entity.OneToMany ...

  10. Spring 读取配置文件的俩种方式

    读取配置可通过 org.springframework.core.env.Environment 类来获取, 也可以通过@Value的方式来获取 注解形式: @PropertySource({&quo ...