USACO-Section 1.3 Barn Repair[...]
来源:互联网 发布:淘宝店铺怎么设置客服 编辑:程序博客网 时间:2024/05/16 05:29
2017-05-30
题目大意:
输入的第一行为三个整数,第一个整数M (1 <= M <= 50)表示区间的个数,第二个整数S (1 <= S <= 200)表示全部整数的范围,第三个整数C表示全部整数的个数。接下来的C行每行有一个在1~S表示的范围内的整数。要求确定M个区间,可以覆盖全部C个数(数可以在区间边界),输出为所覆盖的区间范围的最小值。
样例输入:
4 50 1834681415161721252627303140414243
样例输出:
25
输出解析:
这个样例中符合要求的4个区间为:[3,8], [14,21], [25,31], [40,43]。
题解:
要求覆盖区间最小,即要求使得区间之间空白范围最大。所以进行以下步骤:
(1)对输入的数字进行递增排序(得到数组A);
(2)求出每两个数字之间的差并进行递增排序(得到数组B);
(3)所求的最小覆盖区间值即为A的最大值与最小值(即最后一个元素与第一个元素)的差减去B中前M-1(M为输入的区间数)个值。
注意的是,因为覆盖的区间包括端点,所以计算B中元素时要将差值减1,计算A的最大最小值之差时要将差值加1。
代码如下:
/*ID: madara01PROG: barn1LANG: C++*/#include <iostream> #include <fstream>#include <string>#define cin fin#define cout fout#define MAX 201using namespace std;int m,s,c;int occupied[MAX];int interval[MAX];void sort(int* v,int n){ int i,j,gap,temp; for(gap = n/2; gap > 0; gap /= 2) for(i = gap; i < n; i++) for(j = i - gap; j >= 0 && v[j] > v[j + gap]; j -= gap) { temp = v[j]; v[j] = v[gap + j]; v[j + gap] = temp; }}int main(int argc, char **argv){ int i,j,stalls = 0; ofstream fout ("barn1.out"); ifstream fin ("barn1.in"); cin >> m >> s >> c; for(i = 0; i < c; i++) cin >> occupied[i]; sort(occupied,c); for(i = 0, j = 0; i < c-1; i++) interval[j++] = occupied[i+1] - occupied[i] - 1; sort(interval,c - 1); for(i = 0; i < m - 1; i++) stalls = stalls + interval[c - 2 - i]; stalls = occupied[c-1] - occupied[0] + 1 - stalls; if(m >= c) stalls = c; cout << stalls << endl; return 0;}
阅读全文
0 0
- [USACO]Section 1.3 Barn Repair
- USACO Section 1.3 Barn Repair
- USACO Section 1.3 Barn Repair
- USACO Section 1.3 - Barn Repair
- USACO-Section 1.3 Barn Repair[...]
- USACO Section 1.3 Barn Repair
- USACO Section 1.3.3 Barn Repair
- USACO Section 1.3.2 Barn Repair
- USACO-Section 1.3 Barn Repair(贪心)
- USACO Section 1.3 Barn Repair - 卡了一年的DP...
- USACO Training Section 1.3 Barn Repair 解题报告&AC代码
- USACO 1.3-Barn Repair
- USACO 1.3 Barn Repair
- USACO 1.3 Barn Repair
- USACO--1.3Barn Repair
- USACO 1.3 Barn Repair
- USACO 1.3-Barn Repair
- USCAO-Section 1.3 Barn Repair
- 【数据结构基础】二叉搜索(排序)树的基本操作
- Linux-rpm命令管理介绍
- 微信联系人列表点击侧边栏首字母定位到相应联系人列表的实现方法
- Kotlin汇总1
- 串并转换verilog程序
- USACO-Section 1.3 Barn Repair[...]
- 转载“克鲁斯卡尔算法的详解”
- 栈
- 现在看到这里
- 1011. A+B和C (15)
- SAP UI5的HTML调用view报错500
- mybatis传多个参数(不使用@param注解情况下),3.4.2版本之后使用#{0}-#{n}引起的参数绑定异常,以及settings属性中useActualParamName的作用。
- 深度学习权重初始化的原则
- 解决wordpress 更新翻译提示更新成功了,但是刷新一下又提示的问题