JDOJ 2225: 工资计划

https://neooj.com/oldoj/problem.php?id=2225

Description

高考结束后,同学们大都找到了一份临时工作,渴望挣得一些零用钱。从今天起,

Matrix67将连续工作N天(1<=N<=100 000)。每一天末他可以领取当天及前面若干

天里没有领取的工资,但他总共只有M(1<=M<=N)次领取工资的机会。Matrix67已

经知道了在接下来的这N天里每一天他可以赚多少钱。为了避免自己滥用零花钱,

他希望知道如何安排领取工资的时间才能使得领到工资最多的那一次工资数额最小。

注意Matrix67必须恰好领工资M次,且需要将所有的工资全部领走(即最后一天末需

要领一次工资)。

Input

第一行输入两个用空格隔开的正整数N和M
以下N行每行一个不超过10000正整数,依次表示每一天的薪水。

Output

输出领取到的工资的最大值最小是多少。

Sample Input

7 5
100
400
300
100
500
101
400

Sample Output

500
 
二分答案的基础题。作为本蒟蒻博客里二分答案的第一篇题解,在这里献丑讲解一下二分答案的基本实现原理及注意事项。
二分答案,就是在答案的所有可能区间里应用二分思想。
什么时候用二分答案呢?首先,要有单调性,也就是答案所在区域是单调递增或单调递减的,保证二分之后的结果仍然正确。
一般来讲,题面中出现最小值最大或者最大值最小,就可以用二分求解了。
那么我们开始二分...
二分要注意左边界和右边界,一般使用while循环实现,每次循环用mid取中间值,然后针对于中间值进行函数判断,判断此解符不符合要求,如果不符合,是大了还是小了。然后右移左端点或者左移右端点。
最后得出答案。
二分过程最重要的部分就是判断函数的书写和二分的细节。
什么是二分的细节呢?
我俗气一点说,就是+1和-1的问题,因为是整数除法,有的时候取mid的时候就会取到你不想取的地方导致答案错误,这时要仔细斟酌左移和右移到底需不需要加一或者减一。
最后,取答案的时候也要注意,你取的答案需不需要加减。
总结一下,二分思想特别容易理解,但二分细节特别容易坑爹。
 
那么回到本题,本题的二分很好想。
首先,答案区域的边界,以总工资为上界,以最小的单天工资为下界。
然后是判断函数,扫一遍,从第一天到第n天领工资。
如果领取的总工资tot还没有达到我们的mid,那就继续累加下一天,什么时候冒了,什么时候停止,这个时候就算是领了一次工资。
记住最后退出循环的时候也要特判,因为强制规定最后的那天也要领工资。
最后统计cnt和m的关系,合法就返回1,不合法返回0.
 
最后二分,结束。
 
代码:
#include<cstdio>
#include<algorithm>
using namespace std;
int n,m,sum,ans,maxn;
int a[];
bool check(int x)
{
int tot=,cnt=;
for(int i=;i<=n;i++)
{
if(tot+a[i]<=x)
{
tot+=a[i];
continue;
}
tot=a[i];
cnt++;
}
if(tot>)
cnt++;
if(cnt<=m)
return ;
else
return ;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
sum+=a[i];
maxn=max(maxn,a[i]);
}
int l=maxn;
int r=sum;
while(l<=r)
{
int mid=(l+r)>>;
if(check(mid))
ans=mid,r=mid-;
else
l=mid+;
}
printf("%d",ans);
return ;
}

二分写法二:

#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=1e5+;
int n,m,cnt,tot;
int l,r,ll,rr;
int a[maxn];
bool check(int x)
{
tot=;cnt=;
for(int i=;i<=n;i++)
{
if(tot+a[i]<=x)
{
tot+=a[i];
continue;
}
tot=a[i];
cnt++;
}
if(tot>)
cnt++;
if(cnt<=m)
return ;
else
return ;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
ll=max(ll,a[i]);
rr+=a[i];
}
l=ll;r=rr;
while(l<r)
{
int mid=(l+r)/;
if(check(mid))
r=mid;
else
l=mid+;
}
printf("%d",l);
return ;
}

JDOJ 2225 工资计划的更多相关文章

  1. vijos1710 Mrw的工资计划

    #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> ...

  2. 洛谷 P1182 数列分段 Section II

    洛谷 P1182 数列分段 Section II 洛谷传送门 题目描述 对于给定的一个长度为N的正整数数列A-iA−i,现要将其分成M(M≤N)M(M≤N)段,并要求每段连续,且每段和的最大值最小. ...

  3. 评点SAP HR功能及人力资源管理软件

    评点SAP HR功能及人力资源管理软件   本文导航 第1页:my SAP 人力资源软件 第2页:my SAP HR协同功能 第3页:组织结构管理 第4页:mySAPTM HR的战略功能 第5页:集成 ...

  4. 实战java虚拟机的学习计划图(看懂java虚拟机)

    啥也不说了,实战java虚拟机,好好学习,天天向上!针对自己的软肋制定学习计划. 一部分内容看完,自己做的学习笔记和感想. 学java很简单,但懂java会有难度,如果你的工资还没超过1W,那是时候深 ...

  5. 如何用分析函数找出EMP表中每个部门工资最高的员工

    EMP表是Oracle测试账户SCOTT中的一张雇员表,首先,我们来看看emp表的数据 SQL> select * from emp; EMPNO ENAME JOB MGR HIREDATE ...

  6. 2014总结&2015计划

    2014总结&2015计划 今天是2015/1/1,新的一年终于到来了,昨天老板要求提交2014的工作总结和2015的工作计划,正好提醒我,要总结和计划了. 先回顾2014年初的计划: 新年计 ...

  7. HDU--杭电--4502--吉哥系列故事——临时工计划--背包--01背包

    吉哥系列故事——临时工计划 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) To ...

  8. 工资不高也要给自己放假 这几款APP估计你用得上

    我是这样的一个人,我宁愿工资不高,只要给我足够的假期,那我就满足了.都说上班就是为了赚钱,但如果身体不好,赚再多的钱也是无福享受,所以建议各位,有机会的话,一定要抽出时间去旅游,去放松. 现在我们外出 ...

  9. HTML5-前端开发很火且工资很高?

    前言 晚上逛论坛看到一篇对从事HTML5前端开发的文章写的非常不错,和目前的市场形势差不多,然后我在其基础上给大家进行加工总结一下分享给大家.今天我们谈论的话题是<<为什么从事HTML5前 ...

随机推荐

  1. 【BZOJ3171】[TJOI2013] 循环格(网络流)

    点此看题面 大致题意: 给你一个循环格,每个格子有一个方向.问你至少修改多少格子,才能使从每个格子出发都能回到原格子. 建图 这是道网络流题目,主要就是考虑如何建图. 我们可以把每个点拆成两个点,一个 ...

  2. Note | Ubuntu18.04安装与配置

    目标: 在服务器上配置最新的Ubuntu稳定版本18.04 LTS.18.04比16.04好看很多,非常建议. 有3块硬盘:2块4TB机械硬盘,1块2TB固态硬盘.计划将固态硬盘作为主硬盘,其余两块机 ...

  3. Gradle java使用

    安装 去gradle官网下载然后解压,把bin路径添加到PATH变量即可 查看版本号 gradle -v 生成gradle项目 在新建/已有项目目录下初始化项目 gradle init 配置仓库源 编 ...

  4. 彻底解决Intellij IDEA中文乱码问题

    关于JAVA IDE开发工具,Eclipse系列和Intelli IDEA是大部分公司的主要选择,从开发者的选择角度,Intellij IDEA似乎比Eclipse系列更受欢迎一些.当我们使用Inte ...

  5. vscode10个必装的插件

    VSCode 必装的 10 个高效开发插件   本文介绍了目前前端开发最受欢迎的开发工具 VSCode 必装的 10 个开发插件,用于大大提高软件开发的效率. VSCode 的基本使用可以参考我的原创 ...

  6. 物联网架构成长之路(43)-k8s从入门到放弃

    0. 前言 这段时间要入门一下CI/CD了,以前简单的了解过Jenkins,现在要把以下的这个图的架构搭建起来.国外可能一两个命令就安装完成的事情,我折腾了2天多,真的差点放弃了. 1. 安装Virt ...

  7. resharper 8.2

    用户名:ronle注册码:ZoJzmeVBoAv9Sskw76emgksMMFiLn4NM

  8. V2Ray+WebSocket+TLS+Nginx 配置及使用

    v2ray 是一个模块化的代理工具,支持 VMess,Socks,HTTP,Shadowsocks 等等协议,并且附带很多高级功能,HTTP,TLS 等等. 关键词限制,全文 v2ray 中的 y 为 ...

  9. QGIS中查看PostGIS空间数据库中的影像

    在QGIS中的Browser中是无法显示PostGIS空间数据库中的影像 要找到影像显示打开"Database" –> "DB Manager" 右击-- ...

  10. 阿里Jvm必问面试题及答案

    什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”? Java虚拟机是一个可以执行Java字节码的虚拟机进程.Java源文件被编译成能被Java虚拟机执行的字节码文件. Java被设计 ...