/*
ID: zhangw31
PROG: barn1
LANG:
*/
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
int M, S, C;
struct Gap {
int from;
int len;
bool operator<(const Gap& b) const {
return len > b.len;
}
};
vector<Gap> v;
int pos[205];
int main() {
ifstream fin("barn1.in");
ofstream fout("barn1.out");
fin >> M >> S >> C;
for (int i = 0; i < C; i++) {
fin >> pos[i];
}
sort(pos, pos + C);
int total = pos[C-1] - pos[0] + 1 ;
for (int i = 0; i < C - 1; i++) {
int tmp = pos[i+1] - pos[i] - 1;
Gap g; g.from = i; g.len = tmp;
v.push_back(g);
}
sort(v.begin(), v.end());
int j = 0;
if (M > C) total = C; // 重要的判断!!
else {
while(--M) total -= v[j++].len;
}
fout << total << endl;
}
两道经典贪心题,第二题WA一次,原因是M(屋顶数), C(牛所在数) 的大小关系没考虑到M>C的情况