LibreOJ #2036. 「SHOI2015」自动刷题机
#2036. 「SHOI2015」自动刷题机
题目描述
曾经发明了信号增幅仪的发明家 SHTSC 又公开了他的新发明:自动刷题机——一种可以自动 AC 题目的神秘装置。
自动刷题机刷题的方式非常简单:首先会瞬间得出题目的正确做法,然后开始写程序。每秒,自动刷题机的代码生成模块会有两种可能的结果:
- 写了 xxx 行代码;
- 心情不好,删掉了之前写的 yyy 行代码。(如果 yyy 大于当前代码长度则相当于全部删除。)
对于一个 OJ,存在某个固定的长度 n>0n>0n>0,一旦自动刷题机在某秒结束时积累了大于等于 nnn 行的代码,它就会自动提交并 AC 此题,然后新建一个文件(即弃置之前的所有代码)并开始写下一题。SHTSC 在某个 OJ 上跑了一天的自动刷题机,得到了很多条关于写代码的日志信息。他突然发现自己没有记录这个 OJ 的 nnn 究竟是多少。所幸他通过自己在 OJ 上的 Rank 知道了自动刷题机一共切了 kkk 道题,希望你计算 nnn 可能的最小值和最大值。
输入格式
第一行两个整数 l,kl, kl,k,表示刷题机的日志一共有 lll 行,一共了切了 kkk 题。
第二行 lll 个整数 x1,…,xl。xi≥0x_i \geq 0xi≥0 表示写了 xix_ixi 行代码,xi<0x_i < 0xi<0 表示删除了这道题的 −xi-x_i−xi 行代码。
输出格式
输出两个数 a,ba, ba,b,分别代表 nnn 可能的最小值和最大值。如果不存在这样的 nnn 则输出 −1-1−1。
样例
样例输入
4 2
2
5
-3
9
样例输出
3 7
样例解释
如果 n=2n = 2n=2 那么刷题机就会切掉 333 题。但如果 n>7n > 7n>7 刷题机最多只能切 111 题。考虑 n=4n = 4n=4 时发生了什么。
- 第一秒:刷题机写了 222 行。
- 第二秒:刷题机又写了 555 行,共有 777 行,提交,自信 AC。
- 第三秒:刷题机删掉了 333 行,共有 000 行。
- 第四秒:刷题机写了 999 行,共有 999 行,提交,自信 AC。一共 AC 了两题。
数据范围与提示
对于 20%20\%20% 的数据,n≤10n \leq 10n≤10;
对于 40%40\%40% 的数据,n≤100n \leq 100n≤100;
对于 60%60\%60% 的数据,n≤2000n \leq 2000n≤2000;
对于 100%100\%100% 的数据,n≤100000n \leq 100000n≤100000,−109≤xi≤109-10^9 \leq x_i \leq 10^9−109≤xi≤109。
/*
两遍二分答案
*/
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
using namespace std;
int a[],n,m;
int check(long long it){
int cnt=;
long long now=;
for(int i=;i<=n;i++){
now+=a[i];
if(now>=it){
now=;
cnt++;
}
if(now<)now=;
}
return cnt;
}
long long l,r,mx,ans1,ans2;
int main(){
//freopen("Cola.txt","r",stdin);
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)scanf("%d",&a[i]),mx+=abs(a[i]);
l=;r=mx;
while(l<=r){
long long mid=(l+r)>>;
if(check(mid)<=m)r=mid-,ans1=mid;
else l=mid+;
}
l=;r=mx;
while(l<=r){
long long mid=(l+r)>>;
if(check(mid)>=m)l=mid+,ans2=mid;
else r=mid-;
}
if(check(ans1)!=m||check(ans2)!=m){
printf("-1");return ;
}
cout<<ans1<<' '<<ans2;
}
LibreOJ #2036. 「SHOI2015」自动刷题机的更多相关文章
- Loj #2036. 「SHOI2015」自动刷题机
link : https://loj.ac/problem/2036 这个显然具有单调性,N小的话更容易A题,不仅因为A一次题减少的代码,并且A题的下限也低. 所以直接上二分就行了,注意上限一定不要设 ...
- 「BZOJ4590」「SHOI2015」 自动刷题机 解题报告
自动刷题机 Description 曾经发明了信号增幅仪的发明家SHTSC又公开了他的新发明:自动刷题机--一种可以自动AC题目的神秘装置.自动刷题机刷题的方式非常简单:首先会瞬间得出题目的正确做法, ...
- 「SHOI2015」自动刷题机
/* 有理有据的二分答案 因为在过程中最多减到零 所以n越小显然就能刷更多的题 无解时就是无论如何也无法得到k , 这个特判一下即可 */ #include<cstdio> #includ ...
- 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的题就越多,那么最大最小值都满足单调性,直接瞎搞. ...
- 洛谷 P4343 [SHOI2015]自动刷题机
思路 二分答案 显然的二分答案,但是因为二分判定条件 \(\text{wa}\) 了好几遍-- 可以发现,\(n\) 越大,\(k\) 就越小,所以答案是有单调性的,因此可以用两个二分,一次求最大值, ...
- COGS2642 / Bzoj4590 [Shoi2015]自动刷题机
Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 906 Solved: 321 Description 曾经发明了信号增幅仪的发明家SHTSC又公开了 ...
随机推荐
- [2018-10-10]记录一下Vue的一个问题
最近用vue typescript SPA 做管理后台(ABP官网导出的vue项目模板),遇到一个错误,找了好久,虽然有相关资料,但发现都没解决,这里自己记录一下. Failed to mount c ...
- matlab之结构体数组struct
以下内容来自于:https://blog.csdn.net/u010999396/article/details/54413615/ 要在MALTAB中实现比较复杂的编程,就不能不用struct类型. ...
- ZOJ 3640 Help Me Escape:期望dp
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3640 题意: 有一个吸血鬼被困住了,他要逃跑... 他面前有n条 ...
- Linux_服务器_03_xxx is not in the sudoers file.This incident will be reported.的解决方法
1.切换到root用户下,怎么切换就不用说了吧,不会的自己百度去. 2.添加sudo文件的写权限,命令是:chmod u+w /etc/sudoers 3.编辑sudoers文件vi /etc/sud ...
- Spring注解实现原理
[Spring如何使用注解机制完成自动装配] Java实例构造时会调用默认父类无参构造方法,Spring正是利用了这一点,让"操作元素的代码"得以执行. [两种处理策略] ( ...
- linux命令学习笔记(52):ifconfig命令
许多windows非常熟悉ipconfig命令行工具,它被用来获取网络接口配置信息并对此进行修改.Linux系统拥有 一个类似的工具,也就是ifconfig (interfaces config).通 ...
- darknet YOLO 编译使用GPU
Darknet在GPU上运行可以得到500倍的提速,编译使用GPU要求显卡是Nvidia卡并且正确安装了CUDA. GPU环境下的编译配置都是在 /darknet/Makefile 文件中定义的,GP ...
- Python 实现「食行生鲜」签到领积分
用过食行生鲜的同学应该知道,每天可以在食行生鲜签到,签到可以领到 20 积分,在购物时可以抵 2 毛钱.钱虽少,但是积少成多,买菜时可以抵扣一两块钱还是不错的. 今天我们就用 Python 来实现自动 ...
- 递归/非递归----python深度遍历二叉树(前序遍历,中序遍历,后序遍历)
递归代码:递归实现很简单 '二叉树结点类' class TreeNode: def __init__(self, x): self.val = x self.left = None self.righ ...
- BZOJ_2111_[ZJOI2010]Perm 排列计数_树形DP+组合数学
Description 称一个1,2,...,N的排列P1,P2...,Pn是Magic的,当且仅当2<=i<=N时,Pi>Pi/2. 计算1,2,...N的排列中有多少是Magic ...