NOIP第二次模拟赛 stage1【划分数列(seq.pas/c/cpp)
7划分数列(seq.pas/c/cpp)
【题目描述】
给你一个有n个元素的数列,要求把它划分成k段,使每段元素和的最大值最小
【输入格式】
第一行两个正整数n,k
第二行为此数列ai
【输出格式】
一行一个数,为题目所求答案
【样例输入】
5 2
2 1 3 4 5
【样例输出】
9
【数据规模】
30%数据 n <= 30, k <= 10
100%数据 n <= 100000, k <= n, ai <= 10^9
150%数据 n <= 100000, k <= n, |ai| <= 10^9(附:这50分超越了noip难度,大家可以无视)
【时限】
1s
刚拿到的时候没看数据觉得是动归,QAQ看了数据觉得应该要有优化,二分或者贪心吧。
然而考试的时候并没有做出来(╯‵□′)╯︵┻━┻后来看到大牛的题解,写得很好,贴在这里
http://blog.sina.com.cn/s/blog_9aa2786a01018ksx.html 量子压缩的新浪博客
标程果然二分,当然这道题最大的难点不在二分数据而在于判断是否能够划分这个数据;
下面代码中有足够的注释,文末贴出判断过程
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,k;
long long sum,maxn;
long long num[];
void read()
{
scanf("%d%d",&n,&k);
for(int i=;i<=n;i++)
{
scanf("%lld",&num[i]);
sum+=num[i];//记录总和;
maxn=max(maxn,num[i]);//记录最大值;
}
}
bool judge(int x)//判断能否划分这个数
{
long long temp=;
int pos=;//记录划分的段数;
for(int i=;i<=n;i++)
{
temp+=num[i];
if(temp<=x&&(temp+num[i+])>x)//在i这个位置可以划分;
{
temp=;//重置
pos++;//段数加一;
}
if(pos==k&&i<n) return ;//如果划分的段数将要超过k,那么不能划分为k段,即这个数不能划分;
}
return ;//否则能划分;
}
void work()//二分
{
long long r=sum;
long long l=maxn;
long long m;
while(l<=r)
{
long long mid=(l+r)/;
if(judge(mid))//若这个数可以划分,向左寻找比它小的下一个可以划分的数;
{
r=mid-;
m=mid;//记录这个可以划分的数;
}
else l=mid+;//若不能划分,向右寻找比它大的下一个可以划分的数;
}
printf("%lld",m);
}
int main()
{
freopen("seq.in","r",stdin);
freopen("seq.out","w",stdout);
read();
work();
return ;
}
下面的判断过程也许有点冗长(三个图),代码看懂的同学没有必要往下翻啦。
—!@¥~!#@W~……%——心情复杂的分割线lヾ(。`Д´。)——$—%……¥%¥#¥@#@@@!—
以样例为例,
第一次二分:l=5,r=15,mid=10;
judge
10可以划分,于是r=mid-1=9;
mid=(9+5)/2=7;
7不能划分(划分需要3段),所以l=8,mid=7,后面重复上述过程;
直到mid=9,
终于可以划分了(っ*´Д`)っ,此时m=9,r=8,l=8+1=9,因为l>r,所以二分完毕,打印答案。
前面十个数据没有负数,最后五个有_(:з」∠)_,现在还写不出来所以只得了100分没有AC这道题。
应该会有后续更新【╰(*°▽°*)╯
NOIP第二次模拟赛 stage1【划分数列(seq.pas/c/cpp)的更多相关文章
- 「Vijos 1284」「OIBH杯NOIP2006第二次模拟赛」佳佳的魔法阵
佳佳的魔法阵 背景 也许是为了捕捉猎物(捕捉MM?),也许是因为其它原因,总之,佳佳准备设计一个魔法阵.而设计魔法阵涉及到的最关键问题,似乎就是那些带有魔力的宝石的摆放-- 描述 魔法阵是一个\(n ...
- 10-18 noip提高组模拟赛(codecomb)T1倍增[未填]
T1只想到了找环,> <倍增的思想没有学过,所以看题解看得雨里雾里的(最近真的打算学一下! 题目出的挺好的,觉得noip极有可能出现T1T2T3,所以在此mark 刚开始T1以为是模拟,还 ...
- 【洛谷】NOIP提高组模拟赛Day2【动态开节点/树状数组】【双头链表模拟】
U41571 Agent2 题目背景 炎炎夏日还没有过去,Agent们没有一个想出去外面搞事情的.每当ENLIGHTENED总部组织活动时,人人都说有空,结果到了活动日,却一个接着一个咕咕咕了.只有不 ...
- 10-18 noip提高组模拟赛(codecomb)T2贪心
T2:找min:一直找最小的那个,直到a[i]-x+1小于0,就找次小的,以此类推: 求max,也是一样的,一直到最大的那个,直到次大的比之前最大的大,就找次大的: 这个模拟,可以用上priority ...
- [SinGuLaRiTy] NOIP互测模拟赛
[SinGuLaRiTy-1045] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. 源文件名 输入输出文件 时间限制 内存限制 淘气的cch ...
- [模拟赛] T2 不等数列
Description 将1到n任意排列,然后在排列的每两个数之间根据他们的大小关系插入">"和"<".问在所有排列中,有多少个排列恰好有k个&qu ...
- 【洛谷】NOIP提高组模拟赛Day1【组合数学】【贪心+背包】【网络流判断是否满流以及流量方案】
U41568 Agent1 题目背景 2018年11月17日,中国香港将会迎来一场XM大战,是世界各地的ENLIGHTENED与RESISTANCE开战的地点,某地 的ENLIGHTENED总部也想派 ...
- [LUOGU] NOIP提高组模拟赛Day1
题外话:以Ingress为题材出的比赛好评,绿军好评 T1 考虑枚举第\(i\)个人作为左边必选的一个人,那左边剩余\(i-1\)个人,选法就是\(2^{i-1}\),也就是可以任意选或不选,右侧剩余 ...
- l洛谷 NOIP提高组模拟赛 Day2
传送门 ## T1 区间修改+单点查询.差分树状数组. #include<iostream> #include<cstdio> #include<cstring> ...
随机推荐
- KMP快速模式匹配的java实现
假期实在无聊赖啊.把这个算法实现了一下即算是打发时间也算练练手了. KMP算法的关键是用归纳法计算失败函数.网上很详细了.下面直接给出代码. /** * * @author Vincent * */ ...
- PropertyGrid—默认属性,默认事件,属性默认值
零.引言 PropertyGrid显示一个对象的属性和事件时,可以设置其默认属性和事件,也就是当你选中对象时,propertyGrid中焦点在哪一个属性或事件上.为对象的属性提供默认值,使Proper ...
- easyui combo自动高度(下拉框空白问题)
设置.combo-panel {max-height:200px;} 在用到easyui-combobox时,设置panelHeight:'auto'
- jQuery ZeroClipboard中Flash定位不准确的解决方案
转自波斯马,原文地址<jQuery ZeroClipboard中Flash定位不准确的解决方案> jQuery ZeroClipboard支持在多种浏览器中复制内容到剪贴板,IE.Fire ...
- 在Linux上使用cmake创建CodeBlocks工程
最近在linux上使用cmake,对于使用GUI习惯的还真不能适应,真是想尽一切办法把原来使用cmake的工程创建成CodeBlocks工程.工程小了还能接受,工程大了太麻烦了. 看了一下cmake的 ...
- python学习笔记:python序列
python序列包括字符串.列表和元组三部分,下面先总的说一下python序列共有的一些操作符和内建函数. 一.python序列 序列类型操作符 标准类型的操作符一般都能适用于所有的序列类型,这里说一 ...
- 35个jQuery小技巧!
1. 禁止右键点击$(document).ready(function(){ $(document).bind("contextmenu",function(e){ ...
- webform登录操作中正则表达式运用
关于正则表达式的运用,估计很多人都会觉得这很麻烦.确实很麻烦,太多表达式我也记不住,很多都是临时需要用的时候再去查,有点小学生读小说的架势,不认识的字再去翻字典. 正则表达式严格来说对于程序的功能实现 ...
- MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
问题描述:在用vs生成MVC时若使用Internet应用程序为模版,项目建好后重新编译下无法通过,弹出错误: 解决方案:问题出来后,询问了身边很多人都是一头雾水,于是乎各种谷歌和百度,还好功夫不负有心 ...
- 【转】基于RSA算法实现软件注册码原理初讨
1 前言 目前,商用软件和共享软件绝大部份都是采用注册码授权的方式来保证软件本身不被盗用,以保证自身的利益.尽管很多常用的许多软件系统的某些版本已经被别人破解,但对于软件特殊行业而言,注册码授权的方式 ...