農夫去牛場給奶牛們**。
現在從 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,都種有一棵樹。由於馬路上有一些區域要用來建地鐵。這些區域用它們在數軸上的起始點和終止點表示。已知...