今日头条 2018 AI Camp 5 月 26 日在线笔试编程题第二道——最小分割分数
题目:
给 n 个正整数 a_1,…,a_n, 将 n 个数顺序排成一列后分割成 m 段,每一段的分数被记为这段内所有数的和,该次分割的分数被记为 m 段分数的最大值。问所有分割方案中分割分数的最小值是多少?
输入描述:
第一行依次给出正整数 n, m。
第二行依次给出n 个正整数 a1,...,ana1,...,an。示例:
输入
5 3
1 4 2 3 5
输出
5说明
分割成 1 4 | 2 3 | 5 的时候三段的分数都为 5,得到分割分数的最小值。备注:
对于所有的数据,有 m <= n <= 100000,0 <= aiai <= 2^39。思路
- 将 n 个数划分为 n 段,分割分数即为 n 个正整数的最大值;
- 将 n 个数划分为 1 段,分割分数即为 n 个正整数的和;
- 若分为 m 段,则分割分数一定介于最大值与和之间。因此采用二分查找,每次取一个值对序列进行划分,若能划分出
m 段,使得每段的和都小于这个数值,则满足划分,反之不满足,直至找到一个最小的满足划分的值为止。
代码实现如下:
#include <iostream>
using namespace std; int Judge(int data[], int sum, int m, int n);
int Binary_Search(int data[], int left, int right, int m, int n); int main()
{
int n = , m = ;
cin >> n >> m; int data[n];
int max_num = ;
int sum = ; int i = ; for(i = ; i < n ; i++)
{
cin >> data[i];
if (data[i] > max_num)
{
max_num = data[i];
}
sum += data[i];
} cout << Binary_Search(data, max_num, sum, m, n); return ;
} int Binary_Search(int data[], int left, int right, int m, int n)
{
int mid = ; while (left < right)
{
mid = left + (right - left) / ;
if (Judge(data, mid, m, n)) //满足划分,继续向左寻找
{
right = mid;//不减是因为无法确保减一之后的数是否满足划分
}
else //不满足划分,继续向右寻找
{
left = mid + ;
}
} return left;
} int Judge(int data[], int mid, int m, int n)
{
int cnt = ;
int sum = ; for (int i = ; i < n; i++)
{
if (sum + data[i] > mid) //累加和大于 mid,进行一次划分
{
sum = data[i];
cnt++;
if (cnt > m - ) //划分次数大于 m-1,不满足划分
{
return ;
}
}
else
{
sum += data[i];
}
} return ;
}
个人见解,如有错误,欢迎指正与交流!
获取更多精彩,请关注「seniusen」!
今日头条 2018 AI Camp 5 月 26 日在线笔试编程题第二道——最小分割分数的更多相关文章
- 今日头条 2018 AI Camp 5 月 26 日在线笔试编程题第一道——最佳路径
题目 给定一个 n*m 的矩阵 A ,矩阵中每一个元素为一个十六进制数.寻找一条从左上角都右下角的路径,每次只能向右或者向下移动, 使得路径上所有数字之积在 16 进制下的后缀 0 最少. 输入描述: ...
- 今日头条 2018 AI Camp 6 月 2 日在线笔试编程题第二道——两数差的和
题目 给 n 个实数 a_1, a_2 ... a_n, 要求计算这 n 个数两两之间差的绝对值下取整后的和是多少. 输入描述 第一行为一个正整数 n 和一个整数 m.接下来 n 行,第 i 行代表一 ...
- 今日头条 2018 AI Camp 6 月 2 日在线笔试编程题第一道——最大连续区间和扩展
题目 给出一个长度为 n 的数组a1.a2.....ana1.a2.....an,请找出在所有连续区间 中,区间和最大同时这个区间 0 的个数小于等于 3 个,输出这个区间和. 输入描述: 第一行一个 ...
- 今日头条 2018 AI Camp 视频面试
1. 本次面试是在牛客网平台进行的,没有涉及到技术细节,面试官也说仅仅是聊天.但是,不知道是网络卡顿还是平台缘故,连接非常不稳定,经常听不到声音,对方那边噪音也特别大,面试体验不是很好. 2. 面试时 ...
- 链家2018春招C/C++开发实习生在线考试编程题
题目一 题解:该题目意思就是让你输入n组数据,然后求并集,利用STL容器set集合的特性:元素不重复存储,我们可以很轻易得出答案 #include <iostream> #include ...
- [转帖]ARM A77+G77最强公版架构:联发科5G SoC计划11月26日发布
ARM A77+G77最强公版架构:联发科5G SoC计划11月26日发布 https://www.cnbeta.com/articles/tech/909025.htm 主流的手机SoC厂商已经纷纷 ...
- 2016年12月26日 星期一 --出埃及记 Exodus 21:21
2016年12月26日 星期一 --出埃及记 Exodus 21:21 but he is not to be punished if the slave gets up after a day or ...
- 10月26日 奥威Power-BI基于微软示例库(MSOLAP)快速制作管理驾驶舱 腾讯课堂开课啦
本次课是基于olap数据源的案例实操课,以微软olap示例库Adventure Works为数据基础. AdventureWorks示例数据库为一家虚拟公司的数据,公司背景为大型跨国生产 ...
- 2016年11月26日 星期六 --出埃及记 Exodus 20:17
2016年11月26日 星期六 --出埃及记 Exodus 20:17 "You shall not covet your neighbor's house. You shall not c ...
随机推荐
- Oracle创建聚簇表
创建聚簇表过程: 创建簇(cluster)----创建簇表(基本类似创建一般表但有区别)----创建簇索引(index)----数据管理 创建簇: create cluster stu_ach(sid ...
- React-Reflux 基础分享
因工作需要使用 React + Reflux 开发,最近几天都在努力学习着,特别是 Reflux,在网上查找的许多资料和 github 上的文档年代都有点久远,JavaScript 按照目前的节奏,更 ...
- mysql 一看就会 基本语法
创建表 create table <表名>( <字段名> 类型(长度) not null primary key auto_increment, **主键 name char ...
- wpf中使用cefsharp加载本地html网页并实现cs和js的交互,并且cefsharp支持any cpu
废话少说,直接上代码: 第一步: 第二步: 第三步: 第四步: App.xaml.cs对应的代码: using CefSharp; using CefSharp.Wpf; using System; ...
- df du sync
df命令用来检查linux系统的磁盘空间占用情况 df [选项] -h:以容易理解的格式输出文件系统分区占用情况,如32KB,120MB,60GB -k:以KB大小单位输出文件系统分区占用情况 -m: ...
- 原型 - 实现自己的jQuery
每个第一次使用jq的开发者都感到惊叹,jq的$太神奇了,究竟是怎么做到的使用$控制dom 赞叹前人之余,探究其本源才是前端开发者应该做的事,社区常常说,不要重复造轮子, 可是啊,连轮子都造不出来,又怎 ...
- 树莓派驱动DHT22
树莓派-DHT22测量湿度 一般的温湿度传感器有dht11和dht22,dht11比较便宜,dht22比dht11贵好几倍,自然测量的准确度肯定是dht22高一些.追求更高精准度的可以使用SHT1x. ...
- Anaconda下的python如何写入环境变量中
Anaconda是一个非常好的python管理软件,实际使用起来要比直接用python自带的管理工具更好. 若需要将Anaconda下的python.exe添入环境变量中,需要如下设置 如上图所示,需 ...
- Python基础、条件语句和基本数据类型
1. 第一句python - 后缀名是可以是任意? - 导入模块时,如果不是.py文件 ==> 以后文件后缀名是 .py 2. 两种执行方式 python解释器 py文件路径 python 进入 ...
- Kylin 几个sql报错原因 汇总
Can't create EnumerableAggregate! while executing SQL由distinct count引起的错误 null while executing SQLjo ...