斓少摘苹果

Time Limit: 3000/3000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others)
Submit 
Status

斓少家的院子里有N棵苹果树,每到秋天树上就会结出Fi个苹果。

苹果成熟的时候,斓少就会跑去摘苹果。

斓少摘苹果的方式非常的奇特,每次最多可以选择M个苹果并摘下来。

但是摘下来的苹果两两一定不是来自同一棵树,问斓少最少摘多少次,才能使得每个苹果都被摘下来呢?

Input

第一行输入一个数N和M(1≤M≤N≤106),代表苹果树的数量,和斓少每次最多摘多少个。

第二行输入N个数,第i个数Fi(0≤Fi≤106)代表这一棵树上一共有多少个苹果

Output

输出一个数字,表示最少选择次数

Sample input and output

Sample Input Sample Output
5 3
3 2 3 2 4
5

Hint

样例可以选 (1,3,5) (2,3,5) (1,4,5) (1,2,5) (3,4) 共5次

Source

第七届ACM趣味程序设计竞赛第二场(正式赛)
题解:

假设斓少每次都能取到m个苹果(不足m个时全取到),那么这个次数显然为Ti = (sigma(Fi)-1)/m + 1 

由于对于每一天,每次都只能最多选这一棵树的一个果子,那么至少要取max(Fi)次

现在,令Gi = max(max(Fi),Ti)

现在证明是可以在Gi次取完的  ,Ti是下界。

我们现在把模型转换成把N个宽度为1,长度分别的Gi,颜色为i的矩形。

每个矩形拆分成Fi个1*1的矩形,填充至一个m*Gi的矩形内(可以不填满),满足在Gi行中,每一行都没有同样的颜色矩形

我们从第一列,第一种颜色开始填充,每当这一列填满(即高度到达Gi)时填充下一列,如果该颜色用完就换下一种颜色。

现在证明,这样可以保证每行都不会有同一种颜色。

对于每一种颜色i,由于Gi>=max(Fi)>=Fi,那么任意一种颜色最多在相邻的两列中出现。

如果只在一列中出现,显然都在不同一行。

如果在相邻的两列,那么一列填充到了顶部,下列从最底部开始。设一列填充了ai个,下列填充了bi个,显然当且仅当ai+bi>Gi时才会出现在同一行的情况,但又有ai+bi=Fi<=max(Fi)<=Gi,所以也不会在同一行出现。

于是我们证明,斓少可以在Gi次选完所有的果子。

所以答案为 max( Ti , max(Fi) ),时间复杂度为O(N)
1.注意本题向上取整的写法,还有(sum-1+m)/m!=(sum-1)/m+1因为sum==0时值

便不同
 !!!!,t对m向上取整(t-1+m)/m;

<span style="font-size:24px;color:#3333ff;">#include <iostream>
#include<cstdio>
#include<queue>
#include<algorithm>
#include<cstring>
#define inf 0x3f3f3f3f
using namespace std;
typedef long long ll;
int a[1000005];
int main()
{
int n,m;
while(~scanf("%d %d",&n,&m))
{
ll sum=0,f=0,maxn=0;
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
sum+=a[i];
if(a[i]>maxn)
maxn=a[i];
}
if(maxn>(sum-1+m)/m)
f=maxn;
else
f=</span><span style="font-size:24px;color:#ff0000;">(sum-1+m)/m;</span><span style="font-size:24px;color:#3333ff;">
printf("%lld\n",f);
}
return 0;
}</span><span style="color: rgb(51, 51, 51); font-size: 14px;">
</span>

CDOJ 1255 斓少摘苹果 图论 2016_5_14的更多相关文章

  1. cdoj 1255 斓少摘苹果 贪心

    斓少摘苹果 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/show/1255 Descr ...

  2. 洛谷 P1478 陶陶摘苹果(升级版)

    本萌新第一次发布题解,若有不严谨处请谅解. 我看了前面几位大佬的手笔,表示自己还是比较钟爱桶排序的.它非常简易直接,还省时间,尤其对于这类题目占用的的空间也很小. 我们看到题目下面的说明:xi< ...

  3. 陶陶摘苹果(升级版)P1478_巧妙模拟

    如此水的题居然让我绞尽脑汁,我在想我是不是快退役了. 这道题我看见很多解法:贪心,背包,桶排乱七八糟一大堆. 题目 题目描述 又是一年秋季时,陶陶家的苹果树结了 n 个果子.陶陶又跑去摘苹果,这次他有 ...

  4. 武汉科技大学ACM:1007: 陶陶摘苹果

    Problem Description 厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试. 个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度,请帮陶陶算一下她能够摘到的苹 ...

  5. 洛谷-陶陶摘苹果(升级版)-BOSS战-入门综合练习1

    题目描述 Description 又是一年秋季时,陶陶家的苹果树结了n个果子.陶陶又跑去摘苹果,这次她有一个a公分的椅子.当他手够不着时,他会站到椅子上再试试. 这次与NOIp2005普及组第一题不同 ...

  6. NOIP2005-普及组复赛-第一题-陶陶摘苹果

    题目描述 Description 陶陶家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果.苹果成熟的时候,陶陶就会跑去摘苹果.陶陶有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳 ...

  7. noip普及组2005 陶陶摘苹果

    陶陶摘苹果 描述 陶陶家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果.苹果成熟的时候,陶陶就会跑去摘苹果.陶陶有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试. 现在 ...

  8. 2719:陶陶摘苹果-poj

    2719:陶陶摘苹果 总时间限制:  1000ms 内存限制:  65536kB 描述 陶陶家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果.苹果成熟的时候,陶陶就会跑去摘苹果.陶陶有个30厘米 ...

  9. C语言 · 陶陶摘苹果2

    算法提高 陶陶摘苹果2   时间限制:1.0s   内存限制:256.0MB      问题描述 陶陶家的院子里有一棵苹果树,每到秋天树上就会结出n个苹果.苹果成熟的时候,陶陶就会跑去摘苹果.陶陶有个 ...

随机推荐

  1. python-day7(正式学习)

    目录 数字类型内置方法 整形内置方法(int) 常用操作+内置方法 是否可变 浮点型内置方法(float) 常用操作+内置方法 是否可变 字符串内置方法 常用操作+内置方法 是否可变 数字类型内置方法 ...

  2. JavaSE基础知识之多态

    一. 概述 多态是继封装.继承之后,面向对象的第三大特性,指同一行为,具有多个不同表现形式.生活中,比如跑的动作,小猫.小狗和大象,跑起来是不一样的.再比如飞的动作,昆虫.鸟类和飞机,飞起来也是不一样 ...

  3. Java基础第三天--内部类、常用API

    形参和返回值 抽象类名作为形参和返回值 方法的形参是抽象类名,其实需要的是该抽象类的子类对象 方法的返回值是抽象类名,其实返回的是该抽象类的子类对象 接口名作为形参和返回值 方法的形象是接口名,其实需 ...

  4. 第二十四篇 jQuery 学习6 删除元素

    jQuery 学习6 删除元素   上节课我们做了添加元素,模拟的是楼主发的文章,路人评论,那么同学们这节课学了删除之后,去之前的代码上添加一个删除,模拟一个楼主删除路人的评论. jQuery的删除方 ...

  5. vue 编译警告 Compiled with 4 warnings

    问题原因: windows下盘符的大小写导致的. 我在cmd里运行的时候,是切换到小写,改成大写的E盘符就没问题了

  6. 【漏洞分析】Discuz! X系列全版本后台SQL注入漏洞

    0x01漏洞描述 Discuz!X全版本存在SQL注入漏洞.漏洞产生的原因是source\admincp\admincp_setting.php在处理$settingnew['uc']['appid' ...

  7. UE中正则表达式

    UltraEdit(后简称UE),是我经常使用的文本编辑软件,其功能的强大,令我由衷地爱上了它.每天不用就全身不爽.从最开始的9.0到现在的 12.10a(本人只用到这个版本),UE都是系统重装后必安 ...

  8. C# Monitor Wait()和Pulse()

    C# Monitor Wait()和Pulse()   1.Monitor.Wait方法当线程调用 Wait 时,它释放对象的锁并进入对象的等待队列,对象的就绪队列中的下一个线程(如果有)获取锁并拥有 ...

  9. 常见排序&查询算法Java代码实现

    1. 排序算法代码实现 /** * ascending sort * 外层循环边界条件:总共需要冒泡的轮数--每一轮都将最大或最小的数冒泡到最后 * 内层循环边界条件:冒泡数字移动的边界--最终数字需 ...

  10. 第十章· Logstash深入-Logstash与Redis那点事

    Logstash将日志写入Redis 为什么要使用Redis 在企业中,日志规模的量级远远超出我们的想象,这就是为什么会有一家公司日志易专门做日志收集,给大型金融公司收集日志,比如银行,因为你有可能看 ...