在一个数轴上有n条线段,现要选取其中k条线段使得这k条线段两两没有重合部分,问最大的k为多少。
最左边的线段放什么最好?
显然放右端点最靠左的线段最好,从左向右放,右端点越小妨碍越少
其他线段放置按右端点排序,贪心放置线段,即能放就放
。
//我已经转C++啦(小声bb
#include <bits/stdc++.h>
using namespace std;
struct game {
int start;
int end;
} g[1000001];
int cmp (const game& a, const game& b) {
return a.end < b.end;
}
int main() {
int n;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> g[i].start >> g[i].end;
}
sort (g, g + n, cmp);
int count = 1;
int lastEnd = g[0].end;
for (int i = 1; i < n; i++) {
if (g[i].start >= lastEnd) {
count++;
lastEnd = g[i].end;
}
}
printf("%d\n", count);
}