欢迎访问~原文出处——博客园-zhouzhendong

去博客园看该题解


题目传送门 - BZOJ5090 11月月赛A题


题意概括

  给出n个数。

  求连续区间(长度大于等于k)最大平均值。


题解

  这题大概不是原题。

  很简单的题目(对于大佬而不对于我来说),做过一次。

  具体做法:

  首先二分答案平均值(最好用long double保证精度)

  然后根据前缀和来单调队列判断。

  假设当前要判断的答案为x。

  我们把原序列的每一个数都减去x。

  那么前缀和数组的第i个就减掉了i*x

  那么我得到了一个新的前缀和数组(long double型)。

  如果原序列存在平均值大于x的,那么修改后的序列必然存在总和大于等于0的连续一段数(当然长度要大于或等于k)

  那么只需要看是否有距离>=k的两个前缀和的值满足前面一个小于后面一个就可以了。

  这个可以用单调队列维护解决。

  剩下的就是答案及细节处理。注意开longlong


代码

#include <cstring>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cmath>
using namespace std;
typedef long long LL;
typedef long double LD;
const int N=100005;
const LD Eps=1e-9;
int n,k,ansL,ansR;
int q[N],head,tail;
LL sum[N],A,B;
LD val[N];
LL gcd(LL a,LL b){
return b?gcd(b,a%b):a;
}
bool check(LD x){
for (int i=0;i<=n;i++)
val[i]=-x*i+sum[i];
head=1,tail=0;
for (int i=k;i<=n;i++){
while (head<=tail&&val[i-k]<val[q[tail]])
tail--;
q[++tail]=i-k;
if (head<=tail&&val[q[head]]<val[i]){
ansL=q[head],ansR=i;
return 1;
}
}
return 0;
}
int main(){
scanf("%d%d",&n,&k);
sum[0]=0;
for (int i=1;i<=n;i++)
scanf("%lld",&sum[i]),sum[i]+=sum[i-1];
LD L=-1e8,R=1e8,M;
while (R-L>Eps){
M=(R+L)*0.5;
if (check(M))
L=M;
else
R=M;
}
A=sum[ansR]-sum[ansL];
B=ansR-ansL;
LL g=gcd(A,B);
A/=g,B/=g;
if (B<0)
A=-A,B=-B;
printf("%lld/%lld",A,B);
return 0;
}

  

BZOJ5090 组题 BZOJ2017年11月月赛 二分答案 单调队列的更多相关文章

  1. BZOJ5091 摘苹果 BZOJ2017年11月月赛 概率,期望

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ5091 11月月赛B题 题意概括 题解 代码 #include <cstring> #i ...

  2. csu-2018年11月月赛Round2-div1题解

    csu-2018年11月月赛Round2-div1题解 A(2191):Wells的积木游戏 Description Wells有一堆N个积木,标号1~N,每个标号只出现一次 由于Wells是手残党, ...

  3. csu-2018年11月月赛Round2-div2题解

    csu-2018年11月月赛Round2-div2题解 A(2193):昆虫繁殖 Description 科学家在热带森林中发现了一种特殊的昆虫,这种昆虫的繁殖能力很强.每对成虫过x个月产y对卵,每对 ...

  4. 「P4996」「洛谷11月月赛」 咕咕咕(数论

    题目描述 小 F 是一个能鸽善鹉的同学,他经常把事情拖到最后一天才去做,导致他的某些日子总是非常匆忙. 比如,时间回溯到了 2018 年 11 月 3 日.小 F 望着自己的任务清单: 看 iG 夺冠 ...

  5. 「P4994」「洛谷11月月赛」 终于结束的起点(枚举

    题目背景 终于结束的起点终于写下句点终于我们告别终于我们又回到原点…… 一个个 OIer 的竞赛生涯总是从一场 NOIp 开始,大多也在一场 NOIp 中结束,好似一次次轮回在不断上演.如果这次 NO ...

  6. 「LuoguP4995」「洛谷11月月赛」 跳跳!(贪心

    题目描述 你是一只小跳蛙,你特别擅长在各种地方跳来跳去. 这一天,你和朋友小 F 一起出去玩耍的时候,遇到了一堆高矮不同的石头,其中第 ii 块的石头高度为 h_ihi​,地面的高度是 h_0 = 0 ...

  7. LG 11 月 月赛 II T4

    LG 11 月 月赛 II T4 看到膜数和 $ 10^5 $ 以及 $ n^2 $ 的部分分想到很可能是 NTT 于是开始推式子 首先看到式子可以化作, 如果 \(k = 0\) , $ f(l , ...

  8. [NOIP2017普及组]跳房子(二分,单调队列优化dp)

    [NOIP2017普及组]跳房子 题目描述 跳房子,也叫跳飞机,是一种世界性的儿童游戏,也是中国民间传统的体育游戏之一. 跳房子的游戏规则如下: 在地面上确定一个起点,然后在起点右侧画 nn 个格子, ...

  9. bzoj5090组题 分数规划

    组题 Time Limit: 1 Sec  Memory Limit: 256 MBSubmit: 542  Solved: 114[Submit][Status][Discuss] Descript ...

随机推荐

  1. mipsel汇编指令学习

    MIPS汇编语言基础 MIPS的系统结构及设计理念比较先进,其指令系统经过通用处理器指令体系MIPS I.MIPS II.MIPS III.MIPS IV.MIPS V,以及嵌入式指令体系MIPS16 ...

  2. Java SE之装箱与拆箱【基本数据类型的包装类/==与equals方法】

     对象包装器.自动装箱与拆箱   2016/11/30  晚   特点       1.所有的基本类型都有一个包装器类与之对应.[Integer,Boolean,Long,Character,Shor ...

  3. python - 数据描述符(class 内置 get/set/delete方法 )

    数据描述符(class 内置 get/set/del方法 ): # 什么是描述符 # 官方的定义:描述符是一种具有“捆绑行为”的对象属性.访问(获取.设置和删除)它的属性时,实际是调用特殊的方法(_g ...

  4. jquery 操作表单的问题

    下拉框获取选中项的值: $("#ID").find("option:selected").val(); 设置下拉框选中项: $("#ID") ...

  5. SpringMVC集成Redis

    (1)添加pom依赖 <dependency> <groupId>org.springframework.data</groupId> <artifactId ...

  6. spring data redis使用1——连接的创建

    spring data redis集成了几个Redis客户端框架,Jedis , JRedis (Deprecated since 1.7), SRP (Deprecated since 1.7) a ...

  7. nodejs async series 小白向

    async.series({  flag1:function(done){ //flag1 是一个流程标识,用户自定义      //逻辑处理      done(null,"返回结果&qu ...

  8. mysql caching_sha2_password异常分析

    使用navicat连接mysql报错 解决办法: 通过命令行登录mysql后,输入: alter user 'root'@'localhost' IDENTIFIED WITH mysql_nativ ...

  9. python实现简单登陆流程

    登陆流程图: 代码实现: #-*- coding=utf-8 -*- import os,sys,getpass ''' user.txt 格式 账号 密码 是否锁定 错误次数 jack 123 un ...

  10. 无法下载apk等格式的文件的解决方案---ASP .NET Core 2.0 MVC 发布到IIS上以后无法下载apk等格式的文件的解决方案

    ASP .NET Core MVC 发布到  IIS 上以后 无法下载apk等格式的文件 使用.NET Core MVC创建了一个站点,其他文件可以下载,但是后来又需求,就把手机端的apk合适的文件上 ...