思路

二分答案

显然的二分答案,但是因为二分判定条件 \(\text{wa}\) 了好几遍……

可以发现,\(n\) 越大,\(k\) 就越小,所以答案是有单调性的,因此可以用两个二分,一次求最大值,一次求最小值,这里以求最大为例。

判定一个答案是否可行可以线性扫一遍直接求,在判定中记录过的题数 \(cnt\),由于 \(n\) 越大,\(k\) 就越小,所以:

  • 如果 \(cnt=k\),更新最大值 \(maxn=mid\),并令 \(l=mid+1\),继续查找更大的值
  • 如果 \(cnt<k\),说明 \(mid\) 右边的值都不可行,那么就将 \(r\) 左移,设为 \(r=mid-1\)
  • 如果 \(cnt>k\),说明 \(mid\) 左边的值都不可行,那么就将 \(l\) 右移,设为 \(l=mid+1\)

这样最后找的的值就是最大值了,最小值同理。

注意:

  1. 记得开 \(\text{long long}\),否则会 \(\text{wa}\)
  2. 右端点要设置得足够大
  3. 在求出最大值之后可以直接将其作为求最小值时的二分右端点

代码

/*
Name: P4343 [SHOI2015]自动刷题机
Author: Loceaner
Date: 31/08/20 17:58
Description:
Debug: 二分判定条件出错
*/
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define int long long
using namespace std; const int A = 1e5 + 11;
const int B = 1e6 + 11;
const int mod = 1e9 + 7;
const int inf = 1e18; inline int read() {
char c = getchar();
int x = 0, f = 1;
for ( ; !isdigit(c); c = getchar()) if (c == '-') f = -1;
for ( ; isdigit(c); c = getchar()) x = x * 10 + (c ^ 48);
return x * f;
} int n, k, a[A], maxn = -inf, minn = inf, cnt, now; inline bool check(int x) {
cnt = 0, now = 0;
for (int i = 1; i <= n; i++) {
now += a[i];
if (now < 0) now = 0;
if (now >= x) cnt++, now = 0;
}
return cnt == k;
} signed main() {
n = read(), k = read();
for (int i = 1; i <= n; i++) a[i] = read();
int l = 0, r = inf;
while (l <= r) {
int mid = (l + r) >> 1;
if (check(mid)) maxn = mid, l = mid + 1;
else if (cnt < k) r = mid - 1;
else if (cnt > k) l = mid + 1;
}
l = 1, r = maxn;
while (l <= r) {
int mid = (l + r) >> 1;
if (check(mid)) minn = mid, r = mid - 1;
else if (cnt > k) l = mid + 1;
else if (cnt < k) r = mid - 1;
}
if (minn == inf || maxn == -inf) return cout << "-1\n", 0;
cout << minn << " " << maxn << '\n';
return 0;
}

洛谷 P4343 [SHOI2015]自动刷题机的更多相关文章

  1. 洛谷P4343 [SHOI2015]自动刷题机

    题目 易得该题目中的\(n\)和\(k\)具有单调性,满足二分的性质,因此该题目而已用二分来枚举\(n\),然后对于每个\(n\)模拟出它所对应的\(k\),然后注意注意代码细节,并且当当前\(k\) ...

  2. luogu P4343 [SHOI2015]自动刷题机 |二分答案

    题目描述 曾经发明了信号增幅仪的发明家 SHTSC 又公开了他的新发明:自动刷题机--一种可以自动 AC 题目的神秘装置. 自动刷题机刷题的方式非常简单:首先会瞬间得出题目的正确做法,然后开始写程序. ...

  3. BZOJ_4590_[Shoi2015]自动刷题机_二分答案

    BZOJ_4590_[Shoi2015]自动刷题机_二分答案 Description 曾经发明了信号增幅仪的发明家SHTSC又公开了他的新发明:自动刷题机--一种可以自动AC题目的神秘装置.自动 刷题 ...

  4. BZOJ4590 Shoi2015 自动刷题机 【二分】

    BZOJ4590 Shoi2015 自动刷题机 Description 曾经发明了信号增幅仪的发明家SHTSC又公开了他的新发明:自动刷题机–一种可以自动AC题目的神秘装置.自动刷题机刷题的方式非常简 ...

  5. 【BZOJ4590】[Shoi2015]自动刷题机 二分

    [BZOJ4590][Shoi2015]自动刷题机 Description 曾经发明了信号增幅仪的发明家SHTSC又公开了他的新发明:自动刷题机--一种可以自动AC题目的神秘装置.自动刷题机刷题的方式 ...

  6. bzoj4590: [Shoi2015]自动刷题机(二分答案)

    4590: [Shoi2015]自动刷题机 题目:传送门 题解: 很明显的一道二分题. 对于二分性的判断:如果n越大,那么AC的题就越少,n越小,AC的题就越多,那么最大最小值都满足单调性,直接瞎搞. ...

  7. COGS2642 / Bzoj4590 [Shoi2015]自动刷题机

    Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 906  Solved: 321 Description 曾经发明了信号增幅仪的发明家SHTSC又公开了 ...

  8. BZOJ4590: [Shoi2015]自动刷题机

    显然看着就是二分,仔细看的话显然刷的题数随n增大单调不升. 挂了一发是因为无解输出一个-1而不是两个…… #include<cstdio> #include<algorithm> ...

  9. BZOJ4590——[Shoi2015]自动刷题机

    1.题意:题意很简洁吧,就不概括了 2.分析:我思考了半天,我猜答案满足单调...没敢写,看了题解去问Claris为啥单调,Claris一句话" 因为n越大明显不可能做更多题 ", ...

随机推荐

  1. vjudge CountTables/2018雅礼集训 方阵 dp 斯特林反演

    LINK:CountTables 神题! 首先单独考虑行不同的情况 设\(f_i\)表示此时有i列且 行都不同. 那么显然有 \(f_i=(c^i)^\underline{n}\) 考虑设\(g_i\ ...

  2. JQuery插件,轻量级表单模型验证

    附上源码和Demo段 var validataForm = (function(model) { model.Key = "[data-required='true']"; mod ...

  3. 微信小程序--家庭记账小账本(五)

    (源码已上传至github,https://github.com/xhj1074376195/CostBook_weixin) 今天,尝试弄了账单的表,发现还是弄不了,于是就把账单上的删除功能给去了, ...

  4. [BZOJ4237]稻草人 题解

    我们考虑分治一下 按\(x\)坐标排序 然后对于每一段的两部分都按\(y\)排序 左右两边都维护一个单调栈 然后考虑右边对左边的贡献就行了 #include <bits/stdc++.h> ...

  5. java final关键字与static关键字

    一  final关键字 1.final修饰类不可以被继承,但是可以继承其他类. 例如: class Yy {} final class Fu extends Yy{} //可以继承Yy类 class ...

  6. GitHub上最火的SpringCloud微服务商城系统项目,附全套教程

    项目介绍 mall-swarm是一套微服务商城系统,采用了 Spring Cloud Greenwich.Spring Boot 2.MyBatis.Docker.Elasticsearch等核心技术 ...

  7. 在线快速创建SpringBoot项目

    都2020年了,你还在手动创建SpringBoot项目吗?今天教你在线快速创建一个SpringBoot项目,瞬间高大上有木有! 进入正题,首先打开创建SpringBoot的官网:https://sta ...

  8. CC协议是怎么一回事?

    CC协议是怎样的? CC-BY-NC-SA (创作共用许可协议) "知识共享"(CC协议)简单介绍 如何使用CC协议? CC 协议使用 FAQ CC协议选择工具 本文章采用 CC ...

  9. Mybatis-02-CRUD及配置解析

    CRUD 1.namespace namespace中的包名要和Dao/Mapper接口的包名一致! 2.select 选择,查询语句; id:对应的namespace中的方法名 resultType ...

  10. 很挫的 SHFileOperation 用法 2011-07-18 11:42

    今天编写一个局域网文件拷贝的demo .其中有一个 SHFileOperation 的用法,这个函数有个参数SHFILEOPSTRUCT.查看msdn有如下解释: pFromAddress of a ...