题意:把一个包含m个正整数的序列划分成k个非空的连续子序列。使得所有连续子序列的序列和Si的最大值尽量小。

二分,每次判断一下当前的值是否满足条件,然后修改区间。注意初始区间的范围,L应该为所有正整数中的最大值,否则应该判断时注意。输出解的时候要使字典序最小,所以从后面贪心。

#include<bits/stdc++.h>
using namespace std; typedef long long ll; const int maxm = ;
ll p[maxm];
bool vis[maxm]; int k,m; inline bool P(ll x)
{
int cnt = ;
ll cur = p[];
for(int i = ; i < m; i++){
if(cur + p[i]<=x) cur += p[i];//if a[i] > x false
else cur = p[i],cnt++;
}
return cnt<=k;
} int main()
{
//freopen("in.txt","r",stdin);
int N; scanf("%d",&N);
while(N--){
scanf("%d%d",&m,&k);
ll sum = ,Max = -;;
for(int i = ; i < m; i++) scanf("%lld",p+i),sum+=p[i],Max = max(Max,p[i]);
ll L,R,mid;
for(L = Max,R = sum; L < R; P(mid)?R=mid:L=mid+) mid = (L+R)>>; memset(vis,,sizeof(vis));
ll cur = p[m-]; int kk = k-;
for(int i = m-; i>=&&kk; i--) {
if(cur+p[i]>L||i<kk) vis[i]=true,cur = p[i],kk--;
else cur += p[i];
}
printf("%lld",p[]); if(vis[]) printf(" /");
for(int i = ; i < m; i++){
printf(" %lld",p[i]); if(vis[i]) printf(" /");
}
putchar('\n');
}
return ;
}

UVA 714 Copying Books 抄书 (二分)的更多相关文章

  1. UVa 714 Copying Books(二分)

    题目链接: 传送门 Copying Books Time Limit: 3000MS     Memory Limit: 32768 KB Description Before the inventi ...

  2. 【NOIP提高组2015D2T1】uva 714 copying books【二分答案】——yhx

    Before the invention of book-printing, it was very hard to make a copy of a book. All the contents h ...

  3. UVa 714 Copying books 贪心+二分 最大值最小化

    题目大意: 要抄N本书,编号为1,2,3...N, 每本书有1<=x<=10000000页, 把这些书分配给K个抄写员,要求分配给某个抄写员的那些书的编号必须是连续的.每个抄写员的速度是相 ...

  4. uva 714 Copying Books(二分法求最大值最小化)

    题目连接:714 - Copying Books 题目大意:将一个个数为n的序列分割成m份,要求这m份中的每份中值(该份中的元素和)最大值最小, 输出切割方式,有多种情况输出使得越前面越小的情况. 解 ...

  5. UVA 714 Copying Books 二分

    题目链接: 题目 Copying Books Time limit: 3.000 seconds 问题描述 Before the invention of book-printing, it was ...

  6. UVA 714 Copying Books 最大值最小化问题 (贪心 + 二分)

      Copying Books  Before the invention of book-printing, it was very hard to make a copy of a book. A ...

  7. UVA - 714 Copying Books (抄书)(二分+贪心)

    题意:把一个包含m个正整数的序列划分成k个(1<=k<=m<=500)非空的连续子序列,使得每个正整数恰好属于一个序列(所有的序列不重叠,且每个正整数都要有所属序列).设第i个序列的 ...

  8. UVa 714 Copying Books - 二分答案

    求使最大值最小,可以想到二分答案. 然后再根据题目意思乱搞一下,按要求输出斜杠(这道题觉得就这一个地方难). Code /** * UVa * Problem#12627 * Accepted * T ...

  9. uva 714 - Copying Books(贪心 最大值最小化 二分)

    题目描写叙述开头一大堆屁话,我还细致看了半天..事实上就最后2句管用.意思就是给出n本书然后要分成k份,每份总页数的最大值要最小.问你分配方案,假设最小值同样情况下有多种分配方案,输出前面份数小的,就 ...

随机推荐

  1. Linux下使用sendEmail发送带附件的邮件(转载)

    转载:http://www.ttlsa.com/linux/use-sendemail-send-file/ sendEmail是一个轻量级,命令行的SMTP邮件客户端.如果你需要使用命令行发送邮件, ...

  2. SCUT - 157 - CC和他的GCD - 容斥原理

    https://scut.online/p/157 鉴于多年(都没几个月)搞数论的经验,这种时候枚举g肯定是对的. 那么肯定是要莫比乌斯函数作为因子,因为很显然? 但是为什么要搞个负的呢?其实是因为这 ...

  3. 剑指Offer的学习笔记(C#篇)-- 栈的压入、弹出序列

    题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压 ...

  4. jsp学习与提高(二)——JSP 隐式对象、表单处理及过滤器

    1.JSP 隐式对象 JSP隐式对象是JSP容器为每个页面提供的Java对象,开发者可以直接使用它们而不用显式声明.JSP隐式对象也被称为预定义变量. JSP所支持的九大隐式对象: 对象 描述 req ...

  5. Java基础笔记(四)——命名规则、数据类型

    标识符即Java程序中需要自定义的名称,如变量名.方法名.类名.包名.工程名等. 标识符的命名规则: 1.可由字母.数字.下划线(_)和美元符($)组成,不能以数字开头. 2.严格区分大小写. 3.不 ...

  6. JMeter(7) 优化判断返回类型和返回值

    之前判断接口类型和返回值用beanshell,可见JMeter(5)-JMeter之BeanShell使用 优化点 接口测试里面对返回字段的类型验证和值验证为基本需求,将方法导成jar文件,导入之后方 ...

  7. [LOJ 2082] 「JSOI2016」炸弹攻击 2

    [LOJ 2082] 「JSOI2016」炸弹攻击 2 链接 链接 题解 枚举发射源,将发射源当做原点,对敌人和激光塔极角排序. 由于敌人纵坐标均为正,而其它点均为负,因此每两个角度差在 \(\pi\ ...

  8. Angular2.0的学习(一)

    第一节课 1.Angular程序架构 2.搭建Angular开发环境 3.开发在线竞拍程序Auction的第一个版本

  9. 【手撸一个ORM】第四步、Expression(表达式目录树)扩展

    到这里,Orm的基架已经搭起来了,接下来就是激动人心的部分,表达式目录树转Sql语句,SqlDataReader转数据实体等等,但是在这之前,我们需要扩展下表达式目录树的方法,以方便后面的相关操作. ...

  10. redis和mysql同步 终极解决方案

    使用Canal,类似mysql的主从复制,实时更新 具体使用之后更新