Openjudge noi 7620 區(qū)間合并

題目:

總時間限制: 1000ms 內存限制: 65536kB
描述
給定 n 個閉區(qū)間 [ai; bi],其中i=1,2,...,n。任意兩個相鄰或相交的閉區(qū)間可以合并為一個閉區(qū)間。例如,[1;2] 和 [2;3] 可以合并為 [1;3],[1;3] 和 [2;4] 可以合并為 [1;4],但是[1;2] 和 [3;4] 不可以合并。
我們的任務是判斷這些區(qū)間是否可以最終合并為一個閉區(qū)間,如果可以,將這個閉區(qū)間輸出,否則輸出no。
輸入
第一行為一個整數(shù)n,3 ≤ n ≤ 50000。表示輸入區(qū)間的數(shù)量。之后n行,在第i行上(1 ≤ i ≤ n),為兩個整數(shù) ai 和 bi ,整數(shù)之間用一個空格分隔,表示區(qū)間 [ai; bi](其中 1 ≤ ai ≤ bi ≤ 10000)。
輸出
輸出一行,如果這些區(qū)間最終可以合并為一個閉區(qū)間,輸出這個閉區(qū)間的左右邊界,用單個空格隔開;否則輸出 no。
樣例輸入
5
5 6
1 5
10 10
6 9
8 10
樣例輸出
1 10

這道題可以用貪心的思想做,實際上就是區(qū)間貪心。

參考代碼:

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 50000+10;

struct node {
    int s, e;//起點, 終點;
} a[N];//每一個區(qū)間;

bool cmp(node a, node b) {
    return a.s < b.s;
}

void init(const int n) {
    for (int i = 0;i < n;++i) {
        cin >> a[i].s >> a[i].e;//輸入每個區(qū)間的起點和終點;
    }
}

void structsort(const int n) {
    sort(a, a + n, cmp);//對區(qū)間排序, 按起點從小到大;
    //for (int i = 0;i < n;++i) {
    //  cout << a[i].s << " " << a[i].e << endl;
    //}
}

void judge(const int n) {
    int l, r;//最終區(qū)間的起點和終點;
    l = a[0].s;
    r = a[0].e;
    bool flag = true;
    for (int i = 1;i < n;++i) {
        if (a[i].s <= r) {//表明該區(qū)間與之前的區(qū)間相交或者相連接;
            if (a[i].s < l) {
                l = a[i].s;
            }
            if (a[i].e > r) {//如果該區(qū)間的右區(qū)間比上一個右區(qū)間大, 則更新右區(qū)間;
                r = a[i].e;
            }
        }
        else {
            flag = false;//區(qū)間銜接不上, 說明無法合并為一個區(qū)間;
            break;
        }
    }
    if (flag) cout << l << " " << r << endl;
    else cout << "no" << endl;
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    int n;
    cin >> n;
    init(n);
    structsort(n);
    judge(n);
    return 0;
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 背景 一年多以前我在知乎上答了有關LeetCode的問題, 分享了一些自己做題目的經驗。 張土汪:刷leetcod...
    土汪閱讀 12,890評論 0 33
  • 樹形動態(tài)規(guī)劃,顧名思義就是樹+DP,先分別回顧一下基本內容吧:動態(tài)規(guī)劃:問題可以分解成若干相互聯(lián)系的階段,在每一個...
    Mr_chong閱讀 1,598評論 0 2
  • 轉圈游戲 題目 n 個小伙伴(編號從 0 到 n-1)圍坐一圈玩游戲。按照順時針方向給 n 個位置編號,從0 到 ...
    bbqub閱讀 495評論 0 0
  • 計算機二級C語言上機題庫(南開版) 1.m個人的成績存放在score數(shù)組中,請編寫函數(shù)fun,它的功能是:將低于平...
    MrSunbeam閱讀 6,604評論 1 42
  • 我已經習慣了這種不公平的待遇,這句話絕對不是一句抱怨的話,而是希望讓每個人能夠理解公平。平時,在工作中分配...
    f961ff2e749a閱讀 190評論 0 0

友情鏈接更多精彩內容