POJ 2808 校门外的树
生活随笔
收集整理的這篇文章主要介紹了
POJ 2808 校门外的树
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
時(shí)間限制:?1000m 內(nèi)存限制:65536kB 描述某校大門外長(zhǎng)度為L(zhǎng)的馬路上有一排樹,每?jī)煽孟噜彽臉渲g的間隔都是1米。我們可以把馬路看成一個(gè)數(shù)軸,馬路的一端在數(shù)軸0的位置,另一端在L的位置;數(shù)軸上的每個(gè)整數(shù)點(diǎn),即0,1,2,……,L,都種有一棵樹。
馬路上有一些區(qū)域要用來(lái)建地鐵,這些區(qū)域用它們?cè)跀?shù)軸上的起始點(diǎn)和終止點(diǎn)表示。已知任一區(qū)域的起始點(diǎn)和終止點(diǎn)的坐標(biāo)都是整數(shù),區(qū)域之間可能有重合的部分。現(xiàn)在要把這些區(qū)域中的樹(包括區(qū)域端點(diǎn)處的兩棵樹)移走。你的任務(wù)是計(jì)算將這些樹都移走后,馬路上還有多少棵樹。 輸入輸入的第一行有兩個(gè)整數(shù)L(1 <= L <= 10000)和 M(1 <= M <= 100),L代表馬路的長(zhǎng)度,M代表區(qū)域的數(shù)目,L和M之間用一個(gè)空格隔開。接下來(lái)的M行每行包含兩個(gè)不同的整數(shù),用一個(gè)空格隔開,表示一個(gè)區(qū)域的起始點(diǎn)和終止點(diǎn)的坐標(biāo)。 輸出輸出包括一行,這一行只包含一個(gè)整數(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)、解題思路: 這個(gè)問(wèn)題可以概括為輸入一個(gè)大的整數(shù)閉區(qū)間,及一些可能相互重疊的在該大區(qū)間內(nèi)的小的整數(shù)閉區(qū)間。在大的整數(shù)閉區(qū)間內(nèi)去除這些小的整數(shù)閉區(qū)間,問(wèn)之后剩下的可能不連續(xù)的整數(shù)區(qū)間內(nèi)有多少個(gè)整數(shù)。 可以采用用空間換時(shí)間的方法,用一個(gè)數(shù)組來(lái)模擬這些區(qū)間,類似于位向量的辦法。在數(shù)組中一個(gè)數(shù)代表一棵樹,若沒(méi)移走,為1,移走為0。每輸入一個(gè)區(qū)間,就將區(qū)間內(nèi)的數(shù)置為0,最后統(tǒng)計(jì)1的個(gè)數(shù)即為剩余的樹的棵樹。 這類似于《編程珠璣》第一章中所講述的位圖或者位向量的方法。
馬路上有一些區(qū)域要用來(lái)建地鐵,這些區(qū)域用它們?cè)跀?shù)軸上的起始點(diǎn)和終止點(diǎn)表示。已知任一區(qū)域的起始點(diǎn)和終止點(diǎn)的坐標(biāo)都是整數(shù),區(qū)域之間可能有重合的部分。現(xiàn)在要把這些區(qū)域中的樹(包括區(qū)域端點(diǎn)處的兩棵樹)移走。你的任務(wù)是計(jì)算將這些樹都移走后,馬路上還有多少棵樹。
#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)、解題思路: 這個(gè)問(wèn)題可以概括為輸入一個(gè)大的整數(shù)閉區(qū)間,及一些可能相互重疊的在該大區(qū)間內(nèi)的小的整數(shù)閉區(qū)間。在大的整數(shù)閉區(qū)間內(nèi)去除這些小的整數(shù)閉區(qū)間,問(wèn)之后剩下的可能不連續(xù)的整數(shù)區(qū)間內(nèi)有多少個(gè)整數(shù)。 可以采用用空間換時(shí)間的方法,用一個(gè)數(shù)組來(lái)模擬這些區(qū)間,類似于位向量的辦法。在數(shù)組中一個(gè)數(shù)代表一棵樹,若沒(méi)移走,為1,移走為0。每輸入一個(gè)區(qū)間,就將區(qū)間內(nèi)的數(shù)置為0,最后統(tǒng)計(jì)1的個(gè)數(shù)即為剩余的樹的棵樹。 這類似于《編程珠璣》第一章中所講述的位圖或者位向量的方法。
轉(zhuǎn)載于:https://www.cnblogs.com/lydf-2012/archive/2012/05/11/2496640.html
總結(jié)
以上是生活随笔為你收集整理的POJ 2808 校门外的树的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java例程练习(布局管理器[FlowL
- 下一篇: 一套cms内容网站发布系统