一、题目
49 修理牛棚

作者: xxx时间限制: 1S章节: 一维数组

问题描述 :
在一个暴风雨的夜晚,农民约翰的牛棚的屋顶、门被吹飞了。 好在许多牛正在度假,所以牛棚(牛棚的总数S:1<= S<=200)没有住满。 剩下的牛一个紧挨着另一个被排成一行安置在有屋顶的牛棚来过夜。 所以有些牛棚里有牛,有些没有。
所有的牛棚有相同的宽度,且宽度设为1。 因为有些门遗失,农民约翰需要架起新的木板作为门。 他的新木材供应者将会供应他任何他想要的长度,但是供应者只能提供有限数目的木板。 农民约翰想将他购买的木板总长度减到最少。
计算拦住所有有牛的牛棚所需木板的最小总长度。
输出所需木板的最小总长度作为的答案。

说明:拦住一个牛棚需要的木板长度为1,拦住相邻的三个牛棚则需要木板长度为3。
比如有牛的牛棚编号为:
3 5 8 10 11
并且只能使用两块木板,
则第一块木板从3到5,长度为3,
第二块木板从8到11,长度为4,
因此,需要木板的总长度为7。

输入说明 :
第 1 行: M 和 C(用空格分开)
第 2 到 C+1行: 每行包含一个整数,表示牛所占的牛棚的编号。
其中:
可能买到的木板最大的数目:M(1<= M<=50);
需要安置的牛的数目C(1<= C <=S)
安置后牛所在的牛棚的编号stall_number(1<= stall_number <= S)。

输出说明 :
单独的一行包含一个整数表示所需木板的最小总长度

输入范例 :
3 5
2
4
6
8
7

输出范例 :
5

二、思路及代码
思路:
(1)对输入的牛棚编号排序,最大木板长度len=最大编号-最小编号+1;
(2)遍历排好序的牛棚编号序列,计算出两两牛棚之间的间距=右编号-左编号-1;
(3)对间距排序,从大到小len减去间距,每减一次扣除一块木板。
实现:

#include <stdio.h>//快排
int partition(int* arr,int start,int end)
{int copy = arr[start];int low = start,high = end;while(high > low){while(high > low && arr[high] >= copy) high--;arr[low] = arr[high];while(high > low && arr[low] <= copy) low++;arr[high] = arr[low];}arr[low] = copy;return low;
}
void quickSort(int* arr,int start,int end)
{if(start < end) {int aix = partition(arr,start,end);quickSort(arr,start,aix-1);quickSort(arr,aix+1,end);}
}int main()
{int m,c,s[201] = {0},minLen = 0;scanf("%d%d",&m,&c);for(int i = 0;i < c;i++) scanf("%d",&s[i]);int block[200] = {0};
//    对输入的牛棚编号排序,最大木板长度len=最大编号-最小编号+1;quickSort(s,0,c-1);minLen = s[c-1] - s[0] + 1;
//    遍历排好序的牛棚编号序列,计算出两两牛棚之间的间距=右编号-左编号-1;for(int i = 0; i < c - 1; i++){block[i] = s[i+1] - s[i] - 1;}
//    对间距排序,从大到小len减去间距,每减一次扣除一块木板。quickSort(block,0,c-2);for(int i = 0; i < m - 1 && minLen - block[c-2-i] >= 0; i++){minLen -= block[c-2-i];}printf("%d\n",minLen);return 0;
}

东华OJ 基础 49修理牛棚相关推荐

  1. 东华OJ基础85——手机短号

    85 手机短号 作者: xxx时间限制: 1S章节: 字符串 问题描述 : 大家都知道,手机号是一个11位长的数字串,同时,作为学生,还可以申请加入校园网,如果加入成功,你将另外拥有一个短号.假设所有 ...

  2. 东华OJ基础题76 字符串排序

    问题描述 : 明明刚刚开始学英文,对于26个英文字母的顺序总是记不住,每次默写英文字母的时候,顺序总是前后颠倒.明明的爸爸对此相当着急,想有没有很好的办法来帮助明明记住字母的顺序.一天,明明的爸爸突然 ...

  3. 东华OJ基础题88 你要乘坐的飞碟在这里

    问题描述 : 一个众所周知的事实,在每一颗慧星后面是一个不明飞行物UFO. 这些不明飞行物时常来收集来自在地球上忠诚的支持者. 不幸地,他们的空间在每次旅行只能带上一群支持者. 他们要做的是用一种聪明 ...

  4. 【东华oj】基础/进阶刷题

    东华oj 前言 基础题 [顺序结构] 1 求长方形的面积和周长 2 数列和 3 解方程 [分支结构] 4 一个月的天数 5 银行存款到期日 6 实数运算 7 解二次方程 8 门票价格计算 9 星期几问 ...

  5. USACO1996《修理牛棚》解题报告

    Barn Repair 修理牛棚 译 by tim green 在一个暴风雨的夜晚,农民约翰的牛棚的屋顶.门被吹飞了. 好在许多牛正在度假,所以牛棚没有住满. 剩下的牛一个紧挨着另一个被排成一行来过夜 ...

  6. P1209 [USACO1.3]修理牛棚 Barn Repair 的详解

    P1209 [USACO1.3]修理牛棚 Barn Repair [题目网站] [USACO1.3]修理牛棚 Barn Repair - 洛谷 [题目考点] 间隔的计算 [题目思路] 先输入数据 再算 ...

  7. K10837 修理牛棚 Barn Repair [USACO1.4]

    K10837 修理牛棚 Barn Repair [USACO1.4] 题目描述 在一个夜黑风高,下着暴风雨的夜晚,farmer John的牛棚的屋顶.门被吹飞了. 好在许多牛正在度假,所以牛棚没有住满 ...

  8. 修理牛棚 贪心 USACO

    今天开始终于可以刷USACO的题啦 准备每一道都发一个题解 1010: 1.3.2 Barn Repair 修理牛棚 时间限制: 1 Sec  内存限制: 128 MB 提交: 9  解决: 7 [提 ...

  9. USACO修理牛棚 Barn Repair

    USACO修理牛棚 Barn Repair 题目描述 在一个月黑风高的暴风雨夜,Farmer John 的牛棚的屋顶.门被吹飞了 好在许多牛正在度假,所以牛棚没有住满. 牛棚一个紧挨着另一个被排成一行 ...

最新文章

  1. Linux source命令(转)
  2. 深度学习练手项目(一)-----利用PyTorch实现MNIST手写数字识别
  3. blender的汉化方法!
  4. python opencv3 轮廓检测
  5. 无心剑中译丁尼生《磨坊主千金》
  6. 【蓝桥杯嵌入式】【STM32】7_RTC之实时时间显示和硬件闹钟设置
  7. php echo nbsp,关于include里面的函数echo的问题
  8. 北漂程序员,何以露宿街头?
  9. Delphi XE3 下载
  10. 农历和阳历日期互转,Python实现
  11. EasyUI入门—Layout布局
  12. java钝化_javaEE之--------------session的活化与钝化
  13. 【VOLTE】SRVCC的演进
  14. 相见恨晚的5个资源网站 影视音乐资源随你看
  15. navicat 快捷键使用
  16. 计算机网页设计实习报告怎么写,网页设计实习报告.docx
  17. android如何实现用户注册功能,Android 实现简单的登录注册功能(SharedPreferences和SQLite)...
  18. Adobe Acrobat PDF修改注释作者
  19. 云函数.批量操作数据库
  20. 对于特殊轨道,是否违反泡利不相容原理?

热门文章

  1. “数据科学家”或许不再性感,但“数据团队”的产业化才刚开始 | 专访领英全球数据科学团队负责人
  2. 金蝶K3如何根据生产领料情况控制产品入库
  3. 毕设总结(久等了~)
  4. 怎样解决Keil复制文注释到记事本出现乱码
  5. 删除windows系统垃圾 代码
  6. 一个量化快牛策略的运行逻辑
  7. 若依-后台管理系统安装过程
  8. Linux删除文件常用的几种措施
  9. ansible的play任务
  10. 学生学籍信息管理系统设计c语言,c语言学籍信息管理系统设计