luoguP4343自动刷题机(二分标准题)
https://www.luogu.org/problem/P4343
参考博客:https://www.luogu.org/blog/ofnoname/solution-p4343
这真是一语点醒梦中人啊! 其实我们只需要掌握好一种二分答案的正确写法就行了,不用非要是标准的(看不懂没关系, 说给自己听的)
以下为那位博主的分析,我觉得特别好
容易发现,对于给定的序列,n越大能过的题是越少的,所以可以二分来求刚好过k道题的左右边界。
若mid大于k,即做得太多了,就将l右移。
若mid小于k,即做得太少了,就将r左移。
求左边界,需要在mid等于k时将r左移,求右边界时则需将l右移。这个很好理解。
(这就是我们在哪写ans = mid的依据了)
印象里二分写法极多,但现在普遍应用 l<=r, l=mid+1, r=mid-1这个版本了,虽然要多记录一个ans,但是却在单调增单调减时都能工作,并且可以轻松应对无解的情况。
注意这种写法l应设为1,r设为无穷大即可。
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int k, l;
long long a[100000+9];
long long check(long long n) {
long long sum = 0, num = 0;
for(int i = 1; i <= l; i++) {
sum += a[i];
sum = max(sum, (long long)0);
if(sum >= n) {num++, sum = 0;}
}
return num;
}
int main() {
scanf("%d%d",&l, &k);
for(int i = 1; i <= l; i++) scanf("%lld", &a[i]);
long long l = 1, r = 1e18, mid, mn = -1, mx = -1;// l 设为1, r为INF(真正的INF
while(l <= r) {
mid = (l+r)>>1;
if(check(mid) <= k) {
r = mid - 1;
if(check(mid) == k) mn = mid;//找最小值->需要在合法的时候把r左移,所以在更新r的地方写‘=’
} else l = mid + 1;
}
l = 1, r = 1e18;
while(l <= r) {
mid = (l+r)>>1;
if(check(mid) >= k) {
l = mid + 1;
if(check(mid) == k) mx = mid;//找最大值->需要在合法的时候把l右移, 所以... **让mx越来越大**
}else r = mid - 1;
}
if(mn == -1) printf("-1");//判断不合法情况
else printf("%lld %lld", mn, mx);
}
luoguP4343自动刷题机(二分标准题)的更多相关文章
- 【BZOJ-4590】自动刷题机 二分 + 判定
4590: [Shoi2015]自动刷题机 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 156 Solved: 63[Submit][Status ...
- 【BZOJ4590】[Shoi2015]自动刷题机 二分
[BZOJ4590][Shoi2015]自动刷题机 Description 曾经发明了信号增幅仪的发明家SHTSC又公开了他的新发明:自动刷题机--一种可以自动AC题目的神秘装置.自动刷题机刷题的方式 ...
- bzoj4590: [Shoi2015]自动刷题机(二分答案)
4590: [Shoi2015]自动刷题机 题目:传送门 题解: 很明显的一道二分题. 对于二分性的判断:如果n越大,那么AC的题就越少,n越小,AC的题就越多,那么最大最小值都满足单调性,直接瞎搞. ...
- luogu P4343 [SHOI2015]自动刷题机 |二分答案
题目描述 曾经发明了信号增幅仪的发明家 SHTSC 又公开了他的新发明:自动刷题机--一种可以自动 AC 题目的神秘装置. 自动刷题机刷题的方式非常简单:首先会瞬间得出题目的正确做法,然后开始写程序. ...
- BZOJ 4590 [Shoi2015]自动刷题机 ——二分答案
二分答案水题. #include <cstdio> #include <cstring> #include <iostream> #include <algo ...
- BZOJ_4590_[Shoi2015]自动刷题机_二分答案
BZOJ_4590_[Shoi2015]自动刷题机_二分答案 Description 曾经发明了信号增幅仪的发明家SHTSC又公开了他的新发明:自动刷题机--一种可以自动AC题目的神秘装置.自动 刷题 ...
- BZOJ4590 Shoi2015 自动刷题机 【二分】
BZOJ4590 Shoi2015 自动刷题机 Description 曾经发明了信号增幅仪的发明家SHTSC又公开了他的新发明:自动刷题机–一种可以自动AC题目的神秘装置.自动刷题机刷题的方式非常简 ...
- LibreOJ #2036. 「SHOI2015」自动刷题机
#2036. 「SHOI2015」自动刷题机 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 题目描述 曾经发明了信号增幅仪的发明家 SHTSC 又公开 ...
- BZOJ4590 自动刷题机
Description 曾经发明了信号增幅仪的发明家SHTSC又公开了他的新发明:自动刷题机--一种可以自动AC题目的神秘装置.自动 刷题机刷题的方式非常简单:首先会瞬间得出题目的正确做法,然后开始写 ...
随机推荐
- Mysql—下载安装与使用
一.安装前准备 检查是否已经安装过mysql,执行命令,显示结果为:bt-mysql57-5.7.26-1.el7.x86_64 [root@localhost ~]# rpm -qa | grep ...
- Linux-3.14.12内存管理笔记【构建内存管理框架(5)】
前面已经分析了内存管理框架的构建实现过程,有部分内容未完全呈现出来,这里主要做个补充. 如下图,这是前面已经看到过的linux物理内存管理框架的层次关系. 现着重分析一下各个管理结构体的成员功能作用. ...
- Fiddler应用——Fiddler过滤功能
Fiddler的过滤功能在Fiddler右面板处,点击Filters显示如图所示面板. 如图所示,Fiddler的过滤面板主要分为几个部分: 1.Use Filters:是否启用过滤器 2.Actio ...
- MongoDB学习笔记(二、MongoDB查询)
目录: MongoDB数据类型 MongoDB新增语法 MongoDB查询语法 MongoDB查询选择器 MongoDB关联查询 MongoDB数据类型: MongoDB新增语法: 语法:db.col ...
- (转)玩转Koa -- koa-bodyparser原理解析
地址:http://www.imooc.com/article/274059 一.前置知识 在理解koa-bodyparser原理之前,首先需要了解部分HTTP相关的知识. 1.报文主体 HT ...
- cmd如何跨盘cd切换路径
cmd跨盘cd要加参数 /d ,难怪,我还以为电脑有问题呢~
- Spring Cloud 如何搭建eureka
Eureka Server 的搭建 eureka 是 Spring Cloud 的注册中心,提供服务注册和服务发现的功能. 利用idea 快速创建一个eureka应用File - NewProject ...
- Java Web 学习(2) —— JSP
JSP 一. 什么是 JSP JSP 和 Servlet Servlet 有两个缺点是无法克服的:首先,写在 Servlet 中的所有 HTML 标签必须包含 Java 字符串,这使得处理HTTP响应 ...
- SDN课程阅读作业(2)
SDN课程阅读作业(2) 1.过去20年中可编程网络的发展可以分为几个阶段?每个阶段的贡献是什么? 答:可编程网络的发展分为三个阶段. (1)主动网络阶段 贡献: 1.对主动网络的研究开创了可编程网络 ...
- 趣谈Linux操作系统学习笔记:第二十一讲
一.分段机制 1.分段机制的原理图 2.段选择子 3.段偏移量 例如,我们将上面的虚拟空间分成以下 4 个段,用 0-3 来编号.每个段在段表中有一个项,在物理空间中,段的排列如下图的右边所示. 4. ...