最佳牛围栏 及 寻找段落
时间:2021-08-07
本文章向大家介绍最佳牛围栏 及 寻找段落,主要包括最佳牛围栏 及 寻找段落使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
因其两题具有相似的地方因此合为一篇题解
-----题记
最佳牛围栏
思路:
二分答案
答案即为平均值
(小技巧:一般可以把序列都减去平均值,然后用前缀和),判断区间是否大于0,转化为判定性问题)
至少包含f块地,说明区间长度最少为f
每次减去平均值后,求出前缀和
if(sum[i]-min(sum[0]~sum[i-f])>0) return true;//如果成立此时区间平均值较小
- code
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int n,f;const int maxn=1e5+10;
int m[maxn];double sum[maxn];
bool check(double mid){
sum[0]=0;
for(int i=1;i<=n;++i) sum[i]=sum[i-1]+m[i]-mid;
double minv=0;
for(int i=0,j=f;j<=n;++i,++j){
minv=min(minv,sum[i]);
if(sum[j]>=minv) return true;
}
return false;
}
int main(){
scanf("%d%d",&n,&f);
for(int i=1;i<=n;++i) scanf("%d",&m[i]);
double l=0,r=2000;
while(r-l>1e-5){
double mid=(l+r)/2;
if(check(mid)) l=mid;
else r=mid;
}printf("%d",int(r*1000));
}
寻找最小线段
其实思路有上述大同小异
唯一的差别
就是区间 有上限
判断的时候
应该是这样
if(sum[i]-min(sum[i-t]~sum[i-s]) return 1;
维护一定区间的最小值可以考虑用到单调队列
bool cmp(double mid){
for(int i=s;i<=n;++i){
while(head<=tail && sum[q[tail]]>=sum[i-s]) --tail;//考虑sum[i-s]入队
q[++tail]=i-s;
while(head<=tail && q[head]<=i-t) ++head;//队头超出区间范围弹出
if(head<=tail && sum[i]-sum[q[head]]>0 ) return 1;//相减大于0说明平均值较小
}return 0;
}
ZFY AK IOI
原文地址:https://www.cnblogs.com/guiyou/p/15110706.html
- Centos7.2下针对LDAP的完整部署记录
- .NET Core 已经实现了PHP JIT,现在PHP是.NET上的一门开发语言
- 温故而知新:设计模式之适配器模式(Adapter)
- .NET Core RC2/RTM 明确了时间表
- kvm虚拟化关闭虚拟网卡virbr0的方法
- NET开发学习项目资源(2)
- Linux下selinux简单梳理
- 一段oracle中的“复杂”分组统计sql
- 通过Chocolatey软件包管理器安装.NET Core
- rsync同步时,删除目标目录比源目录多余文件的方法(--delete)
- 近期一枚“大文娱”dawenyu.com域名以小六位价格易主
- 分布式监控系统Zabbix-3.0.3-完整安装记录(0)
- URL安全的Base64编码
- 温故而知新:设计模式之原型模式(Prototype)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 常见编程模式之合并区间
- chmod 777 是开发的常规操作吗?
- 手把手教你进行Anaconda的安装
- 浅析Python基础知识之面向对象
- 手把手教你用Python进行SSH暴力破解
- 一文学会注解的正确使用姿势
- 面试官:请算出走迷宫需要的最少步数
- lua执行redis脚本找不到脚本的问题
- Android |《看完不忘系列》之dagger
- Android | dagger细枝篇
- ES UpdateByQuery Java Api
- [Bazel]repository_rule() vs rule()
- Windows 系统信息收集姿势
- 小白学PyTorch | 3 浅谈Dataset和Dataloader
- 小白学PyTorch | 4 构建模型三要素与权重初始化