zoukankan      html  css  js  c++  java
  • 【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;
    }
    

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

  • 相关阅读:
    LIS
    原根
    数三角形
    组合数问题
    最短路问题
    2020总结
    树状数组
    康托展开
    LCA
    并查集
  • 原文地址:https://www.cnblogs.com/wuhu-xiaoshen/p/4918624.html
Copyright © 2011-2022 走看看