关于上一题的线段覆盖问题,除了用那种逐一情况排除以外,还可以用贪心算法进行计算,适用于数据较大不方便进行双层循环时,当然数据小时肯定可以啦~好了,上代码~
#include#include #include using namespace std; struct point { int l,r; }d[1100006]; bool cmp(const struct point &a,const struct point &b) { return a.r d[i].r) swap(d[i].l,d[i].r); } sort(d,d+n,cmp);//按纵坐标升序排列 a=d[0].r; for(int i=1;i =a)//线段不重合即加一 { counter++; a=d[i].r; } } printf("%d\n",counter+1);//一开始的d[0].r也要算进去,故加一 return 0; }