【USACO2009Decsilver T1 自私的食草者

题目描述
约翰有N(1≤N≤50000)头牛,约翰的草地可以认为是一条直线.每只牛只喜欢在某个特定的范围内吃草.第i头牛喜欢在区间(Si,Ei)吃草,1≤Si< Ei≤1,000,000,00.奶牛们都很自私,他们不喜欢和其他奶牛共享自己喜欢吃草的领域,因此约翰要保证任意两头牛都不会共享他们喜欢吃草昀领域.如果奶牛i和奶牛J想要同时吃草,那么要满足:Si>=Ej或者Ei≤Sj.约翰想知道在同一时刻,最多可以有多少头奶牛同时吃草?
输入格式
第1行:一个整数N.
第2到N+1行:第i+l行有两个整数Si,Ei.
输出格式
一个整数,最多可以有多少头牛同时吃草.
样例输入
5
2 4
1 12
4 5
7 10
7 8
样例输出
3
数据说明
第1,3,4共3只奶牛可以同时吃草,第1,3,5也可以.
直接说思路,网上有人读入优化+二分(hzwer大神居然也用了读入优化),实际上直接读入加暴力即可
先按右边界从小到大排序,再线性扫一遍,找可持续最长的序列即可。

#include<iostream>
#include<cstdlib>
#include<algorithm>
#include<cstdio>
using namespace std;
const int N=50005;
struct node
{
    int x,y;
}a[N];
bool cmp(node a,node b)
{
    return a.y<b.y;
}
int main()
{
    freopen("sgraze.in","r",stdin);
    freopen("sgraze.ans","w",stdout);
    int n,i,last=0,ans=0;
    cin>>n;
    for(i=1;i<=n;i++)
        cin>>a[i].x>>a[i].y;
    sort(a+1,a+n+1,cmp);
    for(i=1;i<=n;i++)
        if(last<=a[i].x)
        {
            last=a[i].y;
            ans++;
        }
    cout<<ans;
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

posted on 2015-10-24 22:02  VanVleet  阅读(236)  评论(0编辑  收藏  举报

导航