自动刷题机

Description

曾经发明了信号增幅仪的发明家SHTSC又公开了他的新发明:自动刷题机--一种可以自动AC题目的神秘装置。自动刷题机刷题的方式非常简单:首先会瞬间得出题目的正确做法,然后开始写程序,每秒,自动刷题机的代码生成模块会有两种可能的结果:

A.写了x行代码。

B.心情不好,删掉了之前写的y行代码。(如果y大于当前代码长度则相当于全部删除。)

对于每个OJ所有题目,存在某个固定的长度n>0。一旦自动刷题机在某秒结束时积累了大于等于n行的代码,它就会自动提交并AC此题,然后新建一个文件开始写下一题。SHTSC在某个OJ上跑了一天的自动刷题机,得到了很多条关于写代码的日志信息。他突然发现自己没有记录这个OJ的n究竟是多少。所幸他通过自己在OJ上的Rank知道了机一共切了k道题。希望你计算n可能的最小值和最大值。

Input

第一行两个整数l,k,表示刷题机的日志一共有l行,一共了切了k题。

第二行l个整数,\(x_1…x_l。\)\(x_i \ge 0\)表示写了\(x_i\)行代码。\(x_i<0\)表示删除了这道题的\(-x_i\)行代码。

\(1 \le l,k \le 100000,\left| x_i \right| \le10^9\)

Output

输出两个数a,b。分别代表n可能的最小值和最大值。如果不存在这样的n则输出-1。

Sample Input

4 2
2
5
-3
9

Sample Output

3 7

样例1:如果n=2那么刷题机就会切掉3题。但如果n>7刷题机最多只能切1题。考虑n=4发生了什么。

第一秒:刷题机写了2行。

第二秒:刷题机又写了5行,共有7行,提交,自信AC。

第三秒:刷题机删掉了3行,共有0行。

第四秒:刷题机写了9行,共有9行,提交,自信AC。

一共AC了两题。


思路

这是一道二分题。 没错这就是一道二分题。

它的单调性很明显。n越大,切的题就越少。 所以,话不多说——直接切入正题。

这里要求最小值(ans1)与最大值(ans2),所以要写2个二分,一个判断条件是\(check(mid) > k\) 另一个是 \(\ge\) 。

ans1要加1,因为\(>k\)求出的是 满足 \(check(mid) > k\) 的 最大值。如果有答案的话,\(ans1 + 1\)必定是满足\(check(mid) = k\)最小值。

话不多说,直接上代码\((〃'▽'〃)——\)

代码

#include<cstdio>
#include<iostream>
using namespace std;
#define LL long long int l, k;
LL a[100005];
LL le(1), ri, ans1, ans2, mid; LL check( LL x ){//模拟求切题数
LL cur(0), s(0);
for ( int i = 1; i <= l; ++i ){
cur = max( cur + a[i], 0ll );
if ( cur >= x ){
s++; cur = 0;
}
}
return s;
} int main(){
scanf( "%d%d", &l, &k );
for ( int i = 1; i <= l; ++i ) scanf( "%lld", &a[i] );
le = 1; ri = 1000000000000000;//边界是个坑,走远一点就不会掉进去了嘛(`・ω・´)反正时间复杂度不会超过O(100)
while( le <= ri ){
mid = ( le + ri ) >> 1;
if ( check( mid ) > k ){
le = mid + 1;
ans1 = mid;
}
else ri = mid - 1;
}
ans1++;
le = 1; ri = 1000000000000000;
while( le <= ri ){
mid = ( le + ri ) >> 1;
if ( check( mid ) >= k ){
le = mid + 1;
ans2 = mid;
}
else ri = mid - 1;
}
if ( check( ans1 ) != k ) printf( "-1\n" );
else printf( "%lld %lld\n", ans1, ans2 );
return 0;
}

「BZOJ4590」「SHOI2015」 自动刷题机 解题报告的更多相关文章

  1. LibreOJ #2036. 「SHOI2015」自动刷题机

    #2036. 「SHOI2015」自动刷题机 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 题目描述 曾经发明了信号增幅仪的发明家 SHTSC 又公开 ...

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

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

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

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

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

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

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

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

  6. 【BZOJ-4590】自动刷题机 二分 + 判定

    4590: [Shoi2015]自动刷题机 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 156  Solved: 63[Submit][Status ...

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

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

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

    思路 二分答案 显然的二分答案,但是因为二分判定条件 \(\text{wa}\) 了好几遍-- 可以发现,\(n\) 越大,\(k\) 就越小,所以答案是有单调性的,因此可以用两个二分,一次求最大值, ...

  9. BZOJ4590 自动刷题机

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

随机推荐

  1. 【HAOI2015】树上染色

    [HAOI2015]树上染色 这题思路好神仙啊,首先显然是树形dp,f[i][j]表示在以i为根的子树中选j个黑点对答案的贡献(并不是当前子树最大值),dp时只考虑i与儿子连边的贡献.此时(i,son ...

  2. 2019-9-30-WPF-运行时迁移-EF-Core-数据库

    title author date CreateTime categories WPF 运行时迁移 EF Core 数据库 lindexi 2019-09-30 20:19:16 +0800 2019 ...

  3. DTCC 2019 | 深度解码阿里数据库实现 数据库内核——基于HLC的分布式事务实现深度剖析

    摘要:分布式事务是分布式数据库最难攻克的技术之一,分布式事务为分布式数据库提供一致性数据访问的支持,保证全局读写原子性和隔离性,提供一体化分布式数据库的用户体验.本文主要分享分布式数据库中的时钟解决方 ...

  4. poj 3528 Ultimate Weapon (3D Convex Hull)

    3528 -- Ultimate Weapon 一道三维凸包的题目,题目要求求出三维凸包的表面积.看懂了网上的三维凸包的代码以后,自己写的代码,跟网上的模板有所不同.调了一个晚上,结果发现错的只是数组 ...

  5. div盒子或者图片并排居中

    要使div总是找不到原因居中很简单,float和display都可以实现,float就不说了,这里说一下display:line-block,比如四个或者多个div盒子,明明设置好了宽度后,总有一个上 ...

  6. [转]安卓加固之so文件加固

    一.前言 最近在学习安卓加固方面的知识,看到了jiangwei212的博客,其中有对so文件加固的两篇文章通过节加密函数和通过hash段找到函数地址直接加密函数,感觉写的特别好,然后自己动手实践探索s ...

  7. 嵌套app ,的h5分支 项目 (分享,保存图片,返回app)

    function callAppBridge(func, argObj) {   const app = window.webkit || window.app;   const args = typ ...

  8. jquery实用应用之jquery操作radio、checkbox、select

    本文收集一些jquery的实用技巧,非常实用的哦,其中对radio.checkbox.select选中与取值的方法. 获取一组radio被选中项的值var item = $('input[@name= ...

  9. Pytorch 多 GPU 并行处理机制

    Pytorch 的多 GPU 处理接口是 torch.nn.DataParallel(module, device_ids),其中 module 参数是所要执行的模型,而 device_ids 则是指 ...

  10. svn 冲突解决办法(黄色感叹号)

    右键:"TortoiseSVN"->"Resolved..."已解决的..., 选中全部的文件,然后OK,,然后就可以commit提交了.