T1429 線段(信息學奧賽一本通)(貪心)

【問題】

在一個數軸上有n條線段,現選取其中kk條線段使得這k條線段兩兩沒有重合部分,問最大的k爲多少?

【輸入】

第一行爲一個正整數n,下面n行每行2個數字ai,bi描述每條線段。

【輸出】

輸出文件僅包括1個整數,爲k的最大值

【思路】

貪心,這裏要注意用scanf和printf,用cin和cout會超時

【源代碼】

#include<bits/stdc++.h>
using namespace std;
#define ll long long
struct line
{
    int l;
    int r;
} lin[1000000];
int cmp(line x,line y)
{
    if(x.r!=y.r)
        return x.r<y.r;
    else
        return x.l<y.l;
}
int main()
{
    int n,ans=0;
    scanf("%d",&n);
    for(int i=0; i<n; i++)
        scanf("%d%d",&lin[i].l,&lin[i].r);;
    sort(lin,lin+n,cmp);
    int start=0;
    for(int i=0; i<n; i++)
    {
        if(lin[i].l>=start)
        {
            start=lin[i].r;
            ans++;
        }
    }
    printf("%d\n",ans);
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章