51Nod --1133 不重叠的线段
生活随笔
收集整理的這篇文章主要介紹了
51Nod --1133 不重叠的线段
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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^9?<=?S,E?<=?10^9) Output 輸出最多可以選擇的線段數量。 Input示例 3 1?5 2?3 3?6 Output示例 2?
?
#include <iostream> #include <cstdio> #include <cstdlib> using namespace std; const int MAXN = 10005; struct Node{int lf, rg; }nd[MAXN]; int n; int cmp(const void *a, const void *b){Node *aa = (Node *)a; Node *bb = (Node *)b; if( aa->lf == bb->lf ){return aa->rg - bb->rg; }else {return aa->lf - bb->lf; } } int main(){int cnt, left_val, right_val; while(scanf("%d", &n) != EOF){for(int i=0; i<n; ++i){scanf("%d %d", &nd[i].lf, &nd[i].rg); }qsort(nd, n, sizeof(nd[0]), cmp); left_val = nd[0].lf; right_val = nd[0].rg; cnt = 1; for(int i=1; i<n; ++i){if(right_val <= nd[i].lf){cnt++; right_val = nd[i].rg; left_val = nd[i].lf; }else{right_val = min(right_val, nd[i].rg); }}printf("%d\n", cnt );}return 0; }
轉載于:https://www.cnblogs.com/zhang-yd/p/6798390.html
總結
以上是生活随笔為你收集整理的51Nod --1133 不重叠的线段的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: React的核心概念
- 下一篇: jQuery $.ajax传递数组的tr