博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 4590: [Shoi2015]自动刷题机
阅读量:5049 次
发布时间:2019-06-12

本文共 1647 字,大约阅读时间需要 5 分钟。

二次联通门 : 

 

 

 

 

/*    BZOJ 4590: [Shoi2015]自动刷题机      二分水题*/#include 
#include
const int BUF = 10000010;char Buf[BUF], *buf = Buf;void read (int &now){ int temp = 0; for (now = 0; !isdigit (*buf); ++ buf) if (*buf == '-') temp = 1; for (; isdigit (*buf); now = now * 10 + *buf - '0', ++ buf); if (temp) now = -now;}#define Max 100007int number[Max];long long Maxn;inline int abs (int x){ return x < 0 ? -x : x;}int N, K;int Check (long long key){ int Count = 0; register long long res = 0; for (int i = 1; i <= N; ++ i) { res += number[i]; if (res < 0) res = 0; if (res >= key) { res = 0; ++ Count; } } return Count;}int main (int argc, char *argv[]){ fread (buf, 1, BUF, stdin); read (N); read (K); for (int i = 1; i <= N; ++ i) read (number[i]), Maxn += abs (number[i]); register long long l, r, Mid; long long Answer_Min = -1, Answer_Max = -1; for (l = 1, r = Maxn; l <= r; ) { Mid = l + r >> 1; if (Check (Mid) <= K) { r = Mid - 1; Answer_Min = Mid; } else l = Mid + 1; } for (l = 1, r = Maxn; l <= r; ) { Mid = l + r >> 1; if (Check (Mid) >= K) { l = Mid + 1; Answer_Max = Mid; } else r = Mid - 1; } if (Check (Answer_Min) != K || Check (Answer_Max) != K) return printf ("-1"), 0; printf ("%lld %lld", Answer_Min, Answer_Max); return 0;}

 

转载于:https://www.cnblogs.com/ZlycerQan/p/7348859.html

你可能感兴趣的文章
noSQL数据库相关软件介绍(大数据存储时候,必须使用)
查看>>
iOS开发——缩放图片
查看>>
HTTP之URL的快捷方式
查看>>
满世界都是图论
查看>>
配置链路聚合中极小错误——失之毫厘谬以千里
查看>>
Python codes
查看>>
【BZOJ4487】[JSOI2015] 染色问题(高维容斥)
查看>>
Ubuntu 环境变量
查看>>
一步一步学MySQL-日志文件
查看>>
bzoj3994: [SDOI2015]约数个数和
查看>>
hdu5306 Gorgeous Sequence
查看>>
Android中使用ListView实现下拉刷新和上拉加载功能
查看>>
proc文件系统的简介
查看>>
连续自然数和
查看>>
[SDOI2015]星际战争
查看>>
用好lua+unity,让性能飞起来——luajit集成篇/平台相关篇
查看>>
JS控制页面跳转
查看>>
递归与循环的区别
查看>>
【USACO】Watering Hole 2008 Oct
查看>>
动态链接的步骤
查看>>