擠牛奶 校門外的樹

2021-10-16 05:27:17 字數 2706 閱讀 4499

農夫去牛場給奶牛們**。

現在從 5 點開始按秒計時,第一名農夫在第 300 秒開始給牛**,並在第 10001000 秒停止**。

第二名農夫在第 700 秒開始給牛**,並在第 1200 秒停止**。

第三名農夫在第 1500 秒開始給牛**,並在第 2100 秒停止**。

從開始**到**完全結束,這一期間,至少存在一名農夫正在**的連續時間段的長度最長為 900 秒(第 300 秒至第 1200 秒),完全沒有任何農夫在**的連續時間段的長度最長為 300 秒(第 1200 秒至第 1500 秒)。

現在給你 nn 名農夫擠 nn 頭奶牛的工作時間表,請你求出:

至少存在一名農夫正在**的連續時間段的最長長度。

沒有任何農夫在**的連續時間段的最長長度。

注意:本題中給出的所有時間均為時刻(時間點),因此在本題中**區間 [100,200][100,200] 和 [201,300][201,300] 中間會有長度為 11 秒的間歇時間。

輸入格式

第一行包含整數 n,表示農夫數量。

接下來 n 行,每行包含兩個非負整數 l,r,表示農夫**的開始時刻和結束時刻。

輸出格式

共一行,包含兩個整數,分別表示最長連續**時間以及最長連續無人**時間。

資料範圍

1≤n≤5000

1≤l≤r≤106

輸入樣例:

3

300 1000

700 1200

1500 2100

輸出樣例:
900 300
合併區間的做法,按照每個區間的左端點進行排序,然後根據下乙個區間的左端點是否比上乙個區間的右端點小,如果小,表明這個兩個區間有重疊的部分,使上乙個區間的右端點等於下乙個區間的有端點,達到合併區間的目的

#include #include using namespace std;

struct f arr[5005];

bool cmp(f c, f d)//按左端點排序

int main(void)

sort(arr, arr + n, cmp);

int l = arr[0].a, r = arr[0].b;//初始維護區間為第乙個區間的左右端點

int max1 = r-l,max2 = 0;//max1為最長**時間(初始為第乙個區間的長度),max2為最長不**時間

for (int i = 1; i < n; i++)

}max1 = max(max1, r - l);//最後別忘了還有區間沒有計算

cout << max1 << ' ' << max2;

return 0;

}//實際區間長度計算的過程中,不一定是r-l,也可能是r-l+1等等,下面的校門外的樹,就是r-l+1來計算樹的數目

某校大門外長度為l的馬路上有一排樹,每兩棵相鄰的樹之間的間隔都是1公尺。

我們可以把馬路看成乙個數軸,馬路的一端在數軸0的位置,另一端在l的位置;數軸上的每個整數點,即0,1,2,……,l,都種有一棵樹。

由於馬路上有一些區域要用來建地鐵。

這些區域用它們在數軸上的起始點和終止點表示。

已知任一區域的起始點和終止點的座標都是整數,區域之間可能有重合的部分。

現在要把這些區域中的樹(包括區域端點處的兩棵樹)移走。

輸入格式

輸入檔案的第一行有兩個整數l和m,l代表馬路的長度,m代表區域的數目,l和m之間用乙個空格隔開。

接下來的m行每行包含兩個不同的整數,用乙個空格隔開,表示乙個區域的起始點和終止點的座標。

輸出格式

輸出檔案包括一行,這一行只包含乙個整數,表示馬路上剩餘的樹的數目。

資料範圍

1≤l≤10000,

1≤m≤100

輸入樣例:

500 3

150 300

100 200

470 471

輸出樣例:
298
兩種做法來做

//利用差分陣列的思想,將被移走的樹進行標記

#include #include using namespace std;

int arr[10005];

int n, m,a,b;

int main(void)

int sum = 0,num = n;

for (int i = 0; i <= n; i++)

cout << num +1<< endl;

return 0;

}

//利用區間合併的思想

#include #include using namespace std;

struct f arr[101];

bool cmp(f c, f d)

int main(void)

sort(arr, arr + n, cmp);

int l = arr[0].a, r = arr[0].b;

int sum = 0;//用來計算合併區間以後的總長度

for (int i = 1; i < n; i++)

}sum += r - l + 1;

cout << m + 1 - sum << endl;

return 0;

}

校門外的樹

描述 某校大門外長度為 l的馬路上有一排樹,每兩棵相鄰的樹之間的間隔都是 1公尺。我們可以把馬路看成乙個數軸,馬路的一端在數軸 0的位置,另一端在 l的位置 數軸上的每個整數點,即0,1,2 l,都種有一棵樹。馬路上有一些區域要用來建地鐵,這些區域用它們在數軸上的起始點和終止點表示。已知任一區域的起...

校門外的樹

某校大門外長度為l的馬路上有一排樹,每兩棵相鄰的樹之間的間隔都是1公尺。我們可以把馬路看成乙個數軸,馬路的一端在數軸0的位置,另一端在l的位置 數軸上的每個整數點,即0,1,2,l,都種有一棵樹。由於馬路上有一些區域要用來建地鐵。這些區域用它們在數軸上的起始點和終止點表示。已知任一區域的起始點和終止...

校門外的樹

校門外的樹 題目描述 某校大門外長度為l的馬路上有一排樹,每兩棵相鄰的樹之間的間隔都是1公尺。我們可以把馬路看成乙個數軸,馬路的一端在數軸0的位置,另一端在l的位置 數軸上的每個整數點,即0,1,2,l,都種有一棵樹。由於馬路上有一些區域要用來建地鐵。這些區域用它們在數軸上的起始點和終止點表示。已知...