51nod 1133 不重疊的線段(貪心)

2021-07-15 22:29:01 字數 1019 閱讀 3355

x軸上有n條線段,每條線段有1個起點s和終點e。最多能夠選出多少條互不重疊的線段。(注:起點或終點重疊,不算重疊)。

例如:[1 5][2 3][3 6],可以選[2 3][3 6],這2條線段互不重疊。

input

第1行:1個數n,線段的數量(2 <= n <= 10000)

第2 - n + 1行:每行2個數,線段的起點和終點(-10^9 <= s,e <= 10^9)

output

輸出最多可以選擇的線段數量。

input示例

3 1 5

2 3

3 6

output示例

2思路:

把每條線段按照起點公升序排序,起點一樣終點公升序排序。

然後把初始終點設為第一條線段的終點(這條肯定是最靠左端的最短的那條),然後遍歷,遇到終點比當前終點還小的就改小終點,否則如果遇到起點比終點大的就更新終點,線段數+1,(看**吧)

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define inf 0x3f3f3f3f

#define mod 7

typedef

long

long ll;

struct nodep[10005];

bool cmp(node a,node b)

sort(p,p+n,cmp);

int y=p[0].e;

int ans=1;

for(int i=1;iif(p[i].eelse

if(p[i].s>=y)

}cout

0;}

51Nod1133 不重疊的線段

x軸上有n條線段,每條線段有1個起點s和終點e。最多能夠選出多少條互不重疊的線段。注 起點或終點重疊,不算重疊 例如 1 5 2 3 3 6 可以選 2 3 3 6 這2條線段互不重疊。經典的序列上的區間問題。明顯的貪心 把右端點從小到大排乙個序 第一關鍵字 左端點從小到大排乙個序 第二關鍵字 然後...

51Nod 1133 不重疊的線段

x軸上有n條線段,每條線段有1個起點s和終點e。最多能夠選出多少條互不重疊的線段。注 起點或終點重疊,不算重疊 例如 1 5 2 3 3 6 可以選 2 3 3 6 這2條線段互不重疊。input 第1行 1個數n,線段的數量 2 n 10000 第2 n 1行 每行2個數,線段的起點和終點 10 ...

51nod 1133 不重疊的線段

x軸上有n條線段,每條線段有1個起點s和終點e。最多能夠選出多少條互不重疊的線段。注 起點或終點重疊,不算重疊 例如 1 5 2 3 3 6 可以選 2 3 3 6 這2條線段互不重疊。input 第1行 1個數n,線段的數量 2 n 10000 第2 n 1行 每行2個數,線段的起點和終點 10 ...