自动刷题机

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. css中background和 background-color 同时使用的优先级

    给背景图片设置一个默认背景颜色,有以下两种方法: <style> .bg1{ background:url(http://debug.itxst.com/img/logo.png) red ...

  2. 2019-9-2-C#枚举中使用Flags特性

    title author date CreateTime categories C#枚举中使用Flags特性 lindexi 2019-09-02 12:57:37 +0800 2018-2-13 1 ...

  3. ACM感想、

    从15年10月开始搞ACM,到如今的16年4月底,已经接近半年了. 大一下学期开始ACM组的人员就不断减少,有的因为坚持不下,有的因为不喜欢,有的没留下理由就走了, 瞬间感觉实验室空了很多很多.现在常 ...

  4. Python--day22--面向对象的交互

    Python里面自带的类和对象: 类名的作用: 类里面的与属性相关的对象self的运用: 实例化:就是创建一个对象 调用方法,类名.方法名(对象名) 执行步骤: 简写:alex.walk()等价于Pe ...

  5. hdu 2639 Bone Collector II(01背包 第K大价值)

    Bone Collector II Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  6. MySQL之Field 'email' doesn't have a default value问题

    MySQL在出现这个Field xxx doesn't have a default value错误的原因是:我们设置了该字段为非空,但是我们没有设置默认值照成的. 比如我们创建一个表: CREATE ...

  7. P1056 骑士游历

    题目描述 给出一个8*8的空棋盘,其中行由a-h编号,列由1-8编号. 再给出起点和终点,问,骑士至少需要几步可以从起点移到终点.骑士是走日的.类似于中国象棋的马. 输入格式 输入两个字符串,每个字符 ...

  8. 2018-8-10-win10-uwp-MVVM-语义耦合

    title author date CreateTime categories win10 uwp MVVM 语义耦合 lindexi 2018-08-10 19:16:53 +0800 2018-2 ...

  9. H3C 三种生成树协议特性的比较

  10. linux 基于 jiffy 的超时

    到目前为止所展示的次优化的延时循环通过查看 jiffy 计数器而不告诉任何人来工作. 但是最好的实现一个延时的方法, 如你可能猜想的, 常常是请求内核为你做. 有 2 种方 法来建立一个基于 jiff ...