【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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章