當(dāng)前位置:
首頁 >
POJ 2808 校门外的树
發(fā)布時間:2024/1/17
38
豆豆
生活随笔
收集整理的這篇文章主要介紹了
POJ 2808 校门外的树
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
時間限制:?1000m 內(nèi)存限制:65536kB 描述某校大門外長度為L的馬路上有一排樹,每兩棵相鄰的樹之間的間隔都是1米。我們可以把馬路看成一個數(shù)軸,馬路的一端在數(shù)軸0的位置,另一端在L的位置;數(shù)軸上的每個整數(shù)點,即0,1,2,……,L,都種有一棵樹。
馬路上有一些區(qū)域要用來建地鐵,這些區(qū)域用它們在數(shù)軸上的起始點和終止點表示。已知任一區(qū)域的起始點和終止點的坐標(biāo)都是整數(shù),區(qū)域之間可能有重合的部分?,F(xiàn)在要把這些區(qū)域中的樹(包括區(qū)域端點處的兩棵樹)移走。你的任務(wù)是計算將這些樹都移走后,馬路上還有多少棵樹。 輸入輸入的第一行有兩個整數(shù)L(1 <= L <= 10000)和 M(1 <= M <= 100),L代表馬路的長度,M代表區(qū)域的數(shù)目,L和M之間用一個空格隔開。接下來的M行每行包含兩個不同的整數(shù),用一個空格隔開,表示一個區(qū)域的起始點和終止點的坐標(biāo)。 輸出輸出包括一行,這一行只包含一個整數(shù),表示馬路上剩余的樹的數(shù)目。 樣例輸入 500 3150 300100 200470 471
樣例輸出 298
(1)、源代碼: #include <iostream>
#include <cstdio>
using namespace std;
int main()
{
???? int L, M, i, j, sum = 0;
???? int tree[10010];
???? int begin[101], end[101];
???? cin >> L >> M;
???? for(i = 0; i <= L; i++)
????????? tree[i] = 1;
???? for(i = 0; i < M; i++)
???? {
????????? cin >> begin[i] >> end[i];
???? }
???? for(i = 0; i < M; i++)
???? {
????????? for(j = begin[i]; j <= end[i]; j++)
?????????????? tree[j] = 0;
???? }
???? for(i = 0; i <= L; i++)
???? {
????????? if(tree[i] == 1)
?????????????? sum++;
???? }
???? cout << sum << endl;
???? return 0;
} (2)、解題思路: 這個問題可以概括為輸入一個大的整數(shù)閉區(qū)間,及一些可能相互重疊的在該大區(qū)間內(nèi)的小的整數(shù)閉區(qū)間。在大的整數(shù)閉區(qū)間內(nèi)去除這些小的整數(shù)閉區(qū)間,問之后剩下的可能不連續(xù)的整數(shù)區(qū)間內(nèi)有多少個整數(shù)。 可以采用用空間換時間的方法,用一個數(shù)組來模擬這些區(qū)間,類似于位向量的辦法。在數(shù)組中一個數(shù)代表一棵樹,若沒移走,為1,移走為0。每輸入一個區(qū)間,就將區(qū)間內(nèi)的數(shù)置為0,最后統(tǒng)計1的個數(shù)即為剩余的樹的棵樹。 這類似于《編程珠璣》第一章中所講述的位圖或者位向量的方法。
馬路上有一些區(qū)域要用來建地鐵,這些區(qū)域用它們在數(shù)軸上的起始點和終止點表示。已知任一區(qū)域的起始點和終止點的坐標(biāo)都是整數(shù),區(qū)域之間可能有重合的部分?,F(xiàn)在要把這些區(qū)域中的樹(包括區(qū)域端點處的兩棵樹)移走。你的任務(wù)是計算將這些樹都移走后,馬路上還有多少棵樹。
#include <cstdio>
using namespace std;
int main()
{
???? int L, M, i, j, sum = 0;
???? int tree[10010];
???? int begin[101], end[101];
???? cin >> L >> M;
???? for(i = 0; i <= L; i++)
????????? tree[i] = 1;
???? for(i = 0; i < M; i++)
???? {
????????? cin >> begin[i] >> end[i];
???? }
???? for(i = 0; i < M; i++)
???? {
????????? for(j = begin[i]; j <= end[i]; j++)
?????????????? tree[j] = 0;
???? }
???? for(i = 0; i <= L; i++)
???? {
????????? if(tree[i] == 1)
?????????????? sum++;
???? }
???? cout << sum << endl;
???? return 0;
} (2)、解題思路: 這個問題可以概括為輸入一個大的整數(shù)閉區(qū)間,及一些可能相互重疊的在該大區(qū)間內(nèi)的小的整數(shù)閉區(qū)間。在大的整數(shù)閉區(qū)間內(nèi)去除這些小的整數(shù)閉區(qū)間,問之后剩下的可能不連續(xù)的整數(shù)區(qū)間內(nèi)有多少個整數(shù)。 可以采用用空間換時間的方法,用一個數(shù)組來模擬這些區(qū)間,類似于位向量的辦法。在數(shù)組中一個數(shù)代表一棵樹,若沒移走,為1,移走為0。每輸入一個區(qū)間,就將區(qū)間內(nèi)的數(shù)置為0,最后統(tǒng)計1的個數(shù)即為剩余的樹的棵樹。 這類似于《編程珠璣》第一章中所講述的位圖或者位向量的方法。
轉(zhuǎn)載于:https://www.cnblogs.com/lydf-2012/archive/2012/05/11/2496640.html
總結(jié)
以上是生活随笔為你收集整理的POJ 2808 校门外的树的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java例程练习(布局管理器[FlowL
- 下一篇: Rtx 实时通知实现