201809 2 買菜演算法

2021-10-23 05:47:25 字數 1351 閱讀 3887

問題描述:

小h和小w來到了一條街上,兩人分開買菜,他們買菜的過程可以描述為,去店裡買一些菜然後去旁邊的乙個廣場把菜裝上車,

兩人都要買n種菜,所以也都要裝n次車。具體的,對於小h來說有n個不相交的時間段[a1,b1],[a2,b2]…[an,bn]在裝車,

對於小w來說有n個不相交的時間段[c1,d1],[c2,d2]…[cn,dn]在裝車。其中,乙個時間段[s, t]表示的是從時刻s到時刻t這段時間,時長為t-s。

由於他們是好朋友,他們都在廣場上裝車的時候會聊天,他們想知道他們可以聊多長時間。

輸入格式:

輸入的第一行包含乙個正整數n,表示時間段的數量。接下來n行每行兩個數ai,bi,描述小h的各個裝車的時間段。

接下來n行每行兩個數ci,di,描述小w的各個裝車的時間段。

輸出格式:

輸出一行,乙個正整數,表示兩人可以聊多長時間。

輸入樣例:

41 3

5 69 13

14 15

2 45 7

10 11

13 14

輸出樣例:

3對於所有的評測用例,1 ≤ n ≤ 2000, ai < bi < ai+1,ci < di < ci+1,對於所有的i(1 ≤ i ≤ n)有,1 ≤ ai, bi, ci, di ≤ 1000000。

聊天時間段有三種可能,

h的時間段的t小於等於w時間段的s(將h時間段向前移動一位)

h的時間段的s大於等於w時間段的t(將w時間段向前移動一位)

第三種即就是想混的情況

對於第三種處理:

我們先比較h和w的時間段s,比較後的最大值為開始聊天的起點,

比較h和w的時間段t,比較後的最小值為聊天的終點,

相減即為聊天時間,此時將t比較後的最小值時間段向前移動一位即可

#include

intmain

(void

)//小w時間段輸入

for(i=

0;i)//聊天 通過分析有小h某個時間段t小於小w時間s ,小h時間s在小w時間t之上 ,小h和小w時間混合

i=0; j=0;

count=0;

while

(ielse

if(arrayh[i][0

]>=arrayw[j][1

])else

else

if(arrayh[i][1

]>arrayw[j][1

])else

count=count+max-min;}}

printf

("%d"

,count)

;return0;

}

CCF 201809 2 買菜(簡單)

小h和小w來到了一條街上,兩人分開買菜,他們買菜的過程可以描述為,去店裡買一些菜然後去旁邊的乙個廣場把菜裝上車,兩人都要買n種菜,所以也都要裝n次車。具體的,對於小h來說有n個不相交的時間段 a1,b1 a2,b2 an,bn 在裝車,對於小w來說有n個不相交的時間段 c1,d1 c2,d2 cn,...

CCF 201809 2 買菜 滿分

試題編號 201809 2 試題名稱 買菜時間限制 1.0s 記憶體限制 256.0mb 問題描述 問題描述 小h和小w來到了一條街上,兩人分開買菜,他們買菜的過程可以描述為,去店裡買一些菜然後去旁邊的乙個廣場把菜裝上車,兩人都要買n種菜,所以也都要裝n次車。具體的,對於小h來說有n個不相交的時間段...

CCF 201809 2 買菜 區間重疊問題

試題編號 201809 2 試題名稱 買菜 時間限制 1.0s 記憶體限制 256.0mb 問題描述 問題描述 小h和小w來到了一條街上,兩人分開買菜,他們買菜的過程可以描述為,去店裡買一些菜然後去旁邊的乙個廣場把菜裝上車,兩人都要買n種菜,所以也都要裝n次車。具體的,對於小h來說有n個不相交的時間...