Luogu P2970 自私的放牧+线段覆盖

题目大意

FJ有一群牛,她们只喜欢在一个特定的地方吃草。现在给你范围,求最多能有几头Cow能同时吃草。

分析

这个题目其实有点类似线段覆盖问题。思路稍微想想就能出来:先
多关键字排序(后端点在前面、长度长一些),然后从第一头牛开始贪心,只要没有公共部分就ans++,然后记录下来之前是那一头牛被“贪心”了。

代码

#include
#include
#include
#include
#include
#include
using namespace std;
int i,m,n,j,k,s=1,take=1;
struct cow{
    int s,e;
}a[50001];
bool cmp(cow a,cow b){
    return (a.eint main(){
    cin>>n;
    for(i=1;i<=n;i++)
        scanf("%d%d",&a[i].s,&a[i].e);
    sort(a+1,a+1+n,cmp);
    for(i=2;i<=n;i++)
        if(a[i].s>=a[take].e)s++,take=i;
    cout<return 0;
}

总结

这种贪心其实比较简单,但是要把奶牛吃草的范围理解成线段才可以当成伪“线段覆盖”做,也就是说做题思路不能死掉~~

你可能感兴趣的:(总结,题目带,算法/数据结构)