东华OJ 基础 49修理牛棚
一、题目
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修理牛棚相关推荐
- 东华OJ基础85——手机短号
85 手机短号 作者: xxx时间限制: 1S章节: 字符串 问题描述 : 大家都知道,手机号是一个11位长的数字串,同时,作为学生,还可以申请加入校园网,如果加入成功,你将另外拥有一个短号.假设所有 ...
- 东华OJ基础题76 字符串排序
问题描述 : 明明刚刚开始学英文,对于26个英文字母的顺序总是记不住,每次默写英文字母的时候,顺序总是前后颠倒.明明的爸爸对此相当着急,想有没有很好的办法来帮助明明记住字母的顺序.一天,明明的爸爸突然 ...
- 东华OJ基础题88 你要乘坐的飞碟在这里
问题描述 : 一个众所周知的事实,在每一颗慧星后面是一个不明飞行物UFO. 这些不明飞行物时常来收集来自在地球上忠诚的支持者. 不幸地,他们的空间在每次旅行只能带上一群支持者. 他们要做的是用一种聪明 ...
- 【东华oj】基础/进阶刷题
东华oj 前言 基础题 [顺序结构] 1 求长方形的面积和周长 2 数列和 3 解方程 [分支结构] 4 一个月的天数 5 银行存款到期日 6 实数运算 7 解二次方程 8 门票价格计算 9 星期几问 ...
- USACO1996《修理牛棚》解题报告
Barn Repair 修理牛棚 译 by tim green 在一个暴风雨的夜晚,农民约翰的牛棚的屋顶.门被吹飞了. 好在许多牛正在度假,所以牛棚没有住满. 剩下的牛一个紧挨着另一个被排成一行来过夜 ...
- P1209 [USACO1.3]修理牛棚 Barn Repair 的详解
P1209 [USACO1.3]修理牛棚 Barn Repair [题目网站] [USACO1.3]修理牛棚 Barn Repair - 洛谷 [题目考点] 间隔的计算 [题目思路] 先输入数据 再算 ...
- K10837 修理牛棚 Barn Repair [USACO1.4]
K10837 修理牛棚 Barn Repair [USACO1.4] 题目描述 在一个夜黑风高,下着暴风雨的夜晚,farmer John的牛棚的屋顶.门被吹飞了. 好在许多牛正在度假,所以牛棚没有住满 ...
- 修理牛棚 贪心 USACO
今天开始终于可以刷USACO的题啦 准备每一道都发一个题解 1010: 1.3.2 Barn Repair 修理牛棚 时间限制: 1 Sec 内存限制: 128 MB 提交: 9 解决: 7 [提 ...
- USACO修理牛棚 Barn Repair
USACO修理牛棚 Barn Repair 题目描述 在一个月黑风高的暴风雨夜,Farmer John 的牛棚的屋顶.门被吹飞了 好在许多牛正在度假,所以牛棚没有住满. 牛棚一个紧挨着另一个被排成一行 ...
最新文章
- Linux source命令(转)
- 深度学习练手项目(一)-----利用PyTorch实现MNIST手写数字识别
- blender的汉化方法!
- python opencv3 轮廓检测
- 无心剑中译丁尼生《磨坊主千金》
- 【蓝桥杯嵌入式】【STM32】7_RTC之实时时间显示和硬件闹钟设置
- php echo nbsp,关于include里面的函数echo的问题
- 北漂程序员,何以露宿街头?
- Delphi XE3 下载
- 农历和阳历日期互转,Python实现
- EasyUI入门—Layout布局
- java钝化_javaEE之--------------session的活化与钝化
- 【VOLTE】SRVCC的演进
- 相见恨晚的5个资源网站 影视音乐资源随你看
- navicat 快捷键使用
- 计算机网页设计实习报告怎么写,网页设计实习报告.docx
- android如何实现用户注册功能,Android 实现简单的登录注册功能(SharedPreferences和SQLite)...
- Adobe Acrobat PDF修改注释作者
- 云函数.批量操作数据库
- 对于特殊轨道,是否违反泡利不相容原理?