线段覆盖 大数 贪心算法

来源:互联网 发布:java自定义异常 编辑:程序博客网 时间:2024/04/28 19:30

关于上一题的线段覆盖问题,除了用那种逐一情况排除以外,还可以用贪心算法进行计算,适用于数据较大不方便进行双层循环时,当然数据小时肯定可以啦~好了,上代码~

#include<iostream>#include<cstdio>#include <algorithm>using namespace std;struct point{int l,r;}d[1100006];bool cmp(const struct point &a,const struct point &b){return a.r<b.r;}int main(){int n,a;int counter=0;    scanf("%d",&n);    for(int i=0;i<n;++i)    {        scanf("%d %d",&d[i].l,&d[i].r);    if(d[i].l>d[i].r) swap(d[i].l,d[i].r);    }        sort(d,d+n,cmp);//按纵坐标升序排列     a=d[0].r;    for(int i=1;i<n;++i)    {    if(d[i].l>=a)//线段不重合即加一         {counter++;            a=d[i].r;        }    }    printf("%d\n",counter+1);//一开始的d[0].r也要算进去,故加一     return 0;}


0 0