洛谷P4343 [SHOI2015]自动刷题机
易得该题目中的\(n\)和\(k\)具有单调性,满足二分的性质,因此该题目而已用二分来枚举\(n\),然后对于每个\(n\)模拟出它所对应的\(k\),然后注意注意代码细节,并且当当前\(k\)等于题目要求的\(k\)时,要分别向左和右二分,才能找出所有情况。
#include <bits/stdc++.h>
#define N 3000011
#define int long long
using namespace std;
int n, k, x[N], sum[N], maxn, minn = 2147483647124544;
int check(int mid)
{
int l = 1, now = 0, tot = 0;
while (l <= n)//这里是不能二分的,因为不满足二分单调性。
{
while (now < mid && l <= n)
{
now += x[l++];
now = max(now, 0LL);
}
if (now >= mid)
tot++, now = 0;//此处l不能++, 因为循环里已经++了
}
return tot;
}
signed main()
{
scanf("%lld%lld", &n, &k);
for (int i = 1; i <= n; i++)
{
scanf("%lld", &x[i]);
sum[i] = sum[i - 1] + x[i];
if (sum[i] < 0) sum[i] = 0;
}
// printf("%lld ", check(3));
int l = 1LL, r = 1000000000000LL;//二分n
while (l <= r)
{
int mid = (l + r) >> 1;
if (check(mid) > k)//如果最终的结果比k大,n越大,k越小
l = mid + 1;
if (check(mid) < k)
r = mid - 1;
if (check(mid) == k)
{
minn = min(minn, mid), maxn = max(maxn, mid);
r = mid - 1;
}
}
l = 1LL, r = 1000000000000LL;
while (l <= r)
{
int mid = (l + r) >> 1;
if (check(mid) > k)//如果最终的结果比k大,n越大,k越小
l = mid + 1;
if (check(mid) < k)
r = mid - 1;
if (check(mid) == k)
{
minn = min(minn, mid), maxn = max(maxn, mid);
l = mid + 1;
}
}
if (minn == 2147483647124544)
printf("-1"), exit(0);
printf("%lld %lld", minn, maxn);
return 0;
}
洛谷P4343 [SHOI2015]自动刷题机的更多相关文章
- 洛谷 P4343 [SHOI2015]自动刷题机
思路 二分答案 显然的二分答案,但是因为二分判定条件 \(\text{wa}\) 了好几遍-- 可以发现,\(n\) 越大,\(k\) 就越小,所以答案是有单调性的,因此可以用两个二分,一次求最大值, ...
- luogu P4343 [SHOI2015]自动刷题机 |二分答案
题目描述 曾经发明了信号增幅仪的发明家 SHTSC 又公开了他的新发明:自动刷题机--一种可以自动 AC 题目的神秘装置. 自动刷题机刷题的方式非常简单:首先会瞬间得出题目的正确做法,然后开始写程序. ...
- BZOJ_4590_[Shoi2015]自动刷题机_二分答案
BZOJ_4590_[Shoi2015]自动刷题机_二分答案 Description 曾经发明了信号增幅仪的发明家SHTSC又公开了他的新发明:自动刷题机--一种可以自动AC题目的神秘装置.自动 刷题 ...
- BZOJ4590 Shoi2015 自动刷题机 【二分】
BZOJ4590 Shoi2015 自动刷题机 Description 曾经发明了信号增幅仪的发明家SHTSC又公开了他的新发明:自动刷题机–一种可以自动AC题目的神秘装置.自动刷题机刷题的方式非常简 ...
- 【BZOJ4590】[Shoi2015]自动刷题机 二分
[BZOJ4590][Shoi2015]自动刷题机 Description 曾经发明了信号增幅仪的发明家SHTSC又公开了他的新发明:自动刷题机--一种可以自动AC题目的神秘装置.自动刷题机刷题的方式 ...
- bzoj4590: [Shoi2015]自动刷题机(二分答案)
4590: [Shoi2015]自动刷题机 题目:传送门 题解: 很明显的一道二分题. 对于二分性的判断:如果n越大,那么AC的题就越少,n越小,AC的题就越多,那么最大最小值都满足单调性,直接瞎搞. ...
- COGS2642 / Bzoj4590 [Shoi2015]自动刷题机
Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 906 Solved: 321 Description 曾经发明了信号增幅仪的发明家SHTSC又公开了 ...
- BZOJ4590: [Shoi2015]自动刷题机
显然看着就是二分,仔细看的话显然刷的题数随n增大单调不升. 挂了一发是因为无解输出一个-1而不是两个…… #include<cstdio> #include<algorithm> ...
- BZOJ4590——[Shoi2015]自动刷题机
1.题意:题意很简洁吧,就不概括了 2.分析:我思考了半天,我猜答案满足单调...没敢写,看了题解去问Claris为啥单调,Claris一句话" 因为n越大明显不可能做更多题 ", ...
随机推荐
- yii框架中的下拉菜单和单选框
yii中的下拉菜单: 第一种: <?= $form->field($model, 'parent_id')->dropDownList(ArrayHelper::map($data, ...
- 阿里巴巴 Java 开发手册 (六) 并发处理
1. [强制]获取单例对象需要保证线程安全,其中的方法也要保证线程安全. 说明:资源驱动类.工具类.单例工厂类都需要注意. 2. [强制]创建线程或线程池时请指定有意义的线程名称,方便出错时回溯. 正 ...
- C# 多线程与高并发处理并且具备暂停、继续、停止功能
--近期有一个需要运用多线程的项目,会有并发概率,所以写了一份代码,可能有写地方还不完善,后续有需求在改 1 /// <summary> /// 并发对象 /// </summary ...
- ASP.NET SignalR 系列(六)之连接事件
本章主要介绍下SignalR自带的连接事件 其实再前面的示例中,有出现了一些事件的重载,比如 public override Task OnConnected() 下面简单介绍一下SignalR提供了 ...
- Tomcat组件梳理—Digester的使用
Tomcat组件梳理-Digester的使用 再吐槽一下,本来以为可以不用再开一个篇章来梳理Digester了,但是发现在研究Service的创建时,还是对Digester的很多接口或者机制不熟悉,简 ...
- Vue v-bind与v-model的区别
v-bind 缩写 : 动态地绑定一个或多个特性,或一个组件 prop 到表达式. 官网举例 <!-- 绑定一个属性 --> <img v-bind:src=" ...
- kubeadm部署高可用K8S集群(v1.14.2)
1. 简介 测试环境Kubernetes 1.14.2版本高可用搭建文档,搭建方式为kubeadm 2. 服务器版本和架构信息 系统版本:CentOS Linux release 7.6.1810 ( ...
- linux设备驱动程序--串行通信驱动框架分析
linux 串行通信接口驱动框架 在学习linux内核驱动时,不论是看linux相关的书籍,又或者是直接看linux的源码,总是能在linux中看到各种各样的框架,linux内核极其庞杂,linux各 ...
- mongodb 安装pymongo 驱动
下载驱动包: https://pypi.org/project/pymongo/ 解压: tar zxvf pymongo-3.8.0.tar.gz 安装: python setup.py i ...
- node基础学习——path的处理与路径转换
处理与转换路径path normalize该方法将非标准路径字符串转换为标准路径字符串,在转换过程中执行以下操作: ①解析路径字符串中的’..’字符串与’.’字符串,返回解析后的标准路径. ②将多个斜 ...