問題描述:
小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個不相交的時間...