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 ...