日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

信息学奥赛一本通(1236:区间合并)

發布時間:2025/3/17 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 信息学奥赛一本通(1236:区间合并) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1236:區間合并


時間限制: 1000 ms ??? ??? 內存限制: 65536 KB
提交數: 7396 ??? 通過數: 3040

【題目描述】

給定?n個閉區間 [ai,bi],其中i=1,2,...,n。任意兩個相鄰或相交的閉區間可以合并為一個閉區間。例如,[1,2] 和 [2,3] 可以合并為 [1,3],[1,3] 和 [2,4] 可以合并為 [1,4],但是[1,2] 和 [3,4] 不可以合并。

我們的任務是判斷這些區間是否可以最終合并為一個閉區間,如果可以,將這個閉區間輸出,否則輸出nono。

【輸入】

第一行為一個整數n,3≤n≤50000。表示輸入區間的數量。

之后n行,在第i行上(1≤i≤n),為兩個整數?ai?和?bi?,整數之間用一個空格分隔,表示區間 [ai,bi](其中?1≤ai≤bi≤10000)。

【輸出】

輸出一行,如果這些區間最終可以合并為一個閉區間,輸出這個閉區間的左右邊界,用單個空格隔開;否則輸出?no。

【輸入樣例】

5 5 6 1 5 10 10 6 9 8 10

【輸出樣例】

1 10

【分析】

? ? ? ? 設坐標A點(x1,y1),B點(x2,y2)。

? ? ? ? AB相交,則x1≤x2≤y1≤y2,如下圖所示。

? ? ? ??

? ? ? ? AB不相交,則x1≤y1≤x2≤y2,如下圖所示。

? ? ? ?

? ? ? ? AB包含,則x1≤x2≤y2≤y1,如下圖所示。

? ? ? ?

? ? ? ? 以樣例為例,先對區間進行排序,x從小到大,如果x相同,則比較y。

? ? ? ? 排序前,

? ? ? ??

? ? ? ? 排序后,

? ? ? ??

? ? ? ? 合并區間即可。

【參考代碼】

#include <stdio.h> #include <stdlib.h> #define N 50010 struct point {int x;int y; }a[N],t;int cmp(const void *a ,const void *b) {struct point *aa = (struct point *)a;struct point *bb = (struct point *)b;if(aa->x != bb->x)return aa->x > bb->x ? 1 : -1;elsereturn aa->y > bb->y ? 1 : -1; }int main() {int i,j,n,flag=0;scanf("%d",&n);for(i=0;i<n;i++)scanf("%d%d",&a[i].x,&a[i].y);qsort(a,n,sizeof(a[0]),cmp);t=a[0];for(i=1;i<n;i++){if(a[i].x > t.y) //沒有交集{printf("no\n");flag=1;break;}else //包含或者相交關系{if(t.y < a[i].y) //相交,單分支if 即可,包含不用處理t.y=a[i].y;}}if(flag==0)printf("%d %d\n",t.x,t.y);return 0; }

http://ybt.ssoier.cn:8088/problem_show.php?pid=1236

總結

以上是生活随笔為你收集整理的信息学奥赛一本通(1236:区间合并)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。