1.3 Barn Repair
唔..这道弱暴的贪心题花了我不少于半个小时,先简述解题思路
之前就有模糊的思路,顺序计算出相邻奶牛之间距离,然后贪心最小的
贪心遇到的麻烦就是到底贪多少个间隔,纠结无比之久,搞定之后发现我连qsort的cmp都写错了.
尼玛样例还是不过,仔细思考,得出贪距离时,每一段都少了一个端点,于是+M
样例过了交上去还是不过.我默认奶牛input有序了....于是qsort之.
还不过...看数据.....忘记极限情况,即木板数多余牛= =...最后加个判断.
简直弱暴了.
唯一高兴的是,这道题是完全在vim下写+调试的,就是笔记本键盘不给力,效率低= =
今天对于vim,算是进入一个新的小阶层~~~不再是只会hjkl移动+x删除+i插入..................
//
//
//
//Input M, S, C
//Calculate dis a-b+1 ->array n
//sort array[n]
//TanXin:i==n-m
#include<iostream>
#include<cstdlib>
#include<cstdio>
using namespace std;
const int maxn = 200;
int cmp(const void *a, const void *b)
{
return *(int*)a - *(int*)b;
}
int main()
{
// freopen("barn1.in", "r", stdin);
// freopen("barn1.out", "w", stdout);
int M, S, C, min = 0, cow[maxn], dis[maxn], a, b, n;
cin >> M >> S >> C;
for(int i = 0; i < C; i++) cin >> cow[i];
qsort(cow, C, sizeof(int), cmp);
for(int i = 1; i < C; i++) dis[i-1] = cow[i]-cow[i-1];
// for(int i = 0; i < C; i++) cout << dis[i] << endl;
qsort(dis, C-1, sizeof(int), cmp);
// cout << n << endl;
// for(int i = 0; i < C-1; i++) cout << dis[i] << endl;
for(int i = 0, stop = C-M; i < stop; i++)
min += dis[i];
if(M>=C) { cout << C << endl; return 0; }
cout << min+M << endl;//each boards +1
return 0;
}