ACM簡單計算題 校門外的樹

2021-07-26 13:56:57 字數 1461 閱讀 2786

某校大門外長度為 l 的馬路上有一排樹,每兩棵相鄰的樹之間的間隔都是 1 公尺。我們可以把馬路看成乙個數軸,馬路的一端在數軸 0 的位置,另一端在 l 的位置;數軸上的每個整數點,即 0, 1, 2,……, l,都種有一棵樹。

由於馬路上有一些區域要用來建地鐵。這些區域用它們在數軸上的起始點和終止點表示。已知任一區域的起始點和終止點的座標都是整數,區域之間可能有重合的部分。現在要把這些區域中的樹(包括區域端點處的兩棵樹)移走。你的任務是計算將這些樹都移走後,馬路上還有多少棵樹。

輸入的第一行有兩個整數 l( 1 <= l <= 10000)和 m( 1 <= m <= 100), l 代表馬路的長度, m 代表區域的數目, l 和 m 之間用乙個空格隔開。接下來的 m 行每行包含兩個不同的整數,用乙個空格隔開,表示乙個區域的起始點和終止點的座標。

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

500 3

150 300

100 200

470 471

298

這個問題可以概括為輸入乙個大的整數閉區間,及一些可能互相重疊的在該大區間內的小的整數閉區間。在大的整數閉區間內去除這些小的整數閉區間,問之後剩下的可能不連續的整數區間內有多少個整數。這個題目給出的範圍是大的區間在 1~10000 以內,要去除的小的區間的個數是 100 個以內。因為規模較小,所以可以考慮用空間換時間,用乙個大陣列來模擬這些區間,陣列中的每個數表示區間上的乙個數。

例如,如果輸入 l 的長度是 500,則據題意可知最初有 501 棵樹。我們就用乙個 501 個元素的陣列來模擬這 501 棵樹,陣列的下標分別代表從 1 到 501 棵樹,陣列元素的值代表這棵樹是否被一走。最初這些樹都沒有被移走,所以所有陣列元素的值都用 true 來表示。每當輸入乙個小區間,就將這個區間對應的樹全部移走,即將這個區間對應的陣列元素下標指示的元素的值置成 false。如果有多個區間對應同乙個陣列元素,會導致多次將某個陣列元素置成 false。不過這並不影響結果的正確性。當所有小區間輸入完成,我們可以數一下剩下的仍舊為 true 的元素的個數,就可以得到最後剩下的樹的數目。當然如果最開始輸入的區間不是 500,則我們使用的陣列大小就不是 500。因為題目給出的上限是 10000,所以我們可以定義乙個大小是 10001 個元素的陣列,這樣對所有輸入都是夠用的。

#include using namespace std;

int main()

cin>>l>>n;

for(i=0;i>begin>>end;

for(j=begin;j<=end;j++)

} int count=0;

//用 count 計數,數數剩餘的樹的數目。

for(i=0;i<=l;i++)

} cout<

ACM簡單計算題 填詞

輸入的第一行包括三個整數 n,m 和 p 2 m,n 10,0 p 100 接下來的 n 行,每行包括 m 個字元,來表示方格盤。接下來 p 行給出需要在方格盤中找到的單詞。輸入保證填詞遊戲至少有一組答案。輸入中給出的字母都是大寫字母。輸出 神秘單詞 注意 神秘單詞 中的字母要按照字典序給出。3 3...

ACM經典題目 校門外的樹

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

SSL 1474 簡單計算題

給定長度為 n 的陣列 s 你需要統計有多少個四元組 a,b,c,d 滿足 1 leq as d 且 a,b,c,d 互不相等。利用容斥的思想,把所有 s as d 的情況全部求出來,但是有些情況是不合法的,如 a c,a d,b c,b d 將這些方法減去。關於如何把 s as d 的情況全部求出...