NYOJ 51 管閒事的小明
阿新 • • 發佈:2019-02-06
描述 某校大門外長度為L的馬路上有一排樹,每兩棵相鄰的樹之間的間隔都是1米。我們可以把馬路看成一個數軸,馬路的一端在數軸0的位置,另一端在L的位置;數軸上的每個整數點,即0,1,2,……,L,都種有一棵樹。
由於馬路上有一些區域要用來建地鐵。這些區域用它們在數軸上的起始點和終止點表示。 已知任一區域的起始點和終止點的座標都是整數,區域之間可能有重合的部分。現在要把這些區域中的樹(包括區域端點處的兩棵樹)移走。聰明的小明幹了一件又一件事,他覺得這個很有意思,就想用計算機來幫助建築工人統計這些樹,現在任務來了,計算將這些樹都移走後,馬路上還有多少棵樹。
- 輸入
- 第一行是一個整數N表示有N組測試資料(1<=N<=100)
每組測試資料的第一行有兩個整數:L(1 <= L <= 10000)和 M(1 <= M <= 100),L代表馬路的長度,M代表區域的數目,L和M之間用一個空格隔開。接下來的M行每行包含兩個不同的整數,用一個空格隔開,表示一個區域的起始點和終止點的座標。 - 輸出
- 輸出包括一行,這一行只包含一個整數,表示馬路上剩餘的樹的數目。
- 樣例輸入
-
1 500 3 150 300 100 200 470 471
- 樣例輸出
-
298
#include <iostream> #include <cstring> using namespace std; int main() { int n, i, j, k,l,m,count; int a[10001]; cin >> n; while (n--) { count = 0; memset(a, 0, sizeof(a)); cin >>j>>k; for (i = 0; i < k; i++) { cin >> l >> m; while (m >= l) { a[m] = 1; m--; } } for (i = 0; i <= j; i++) { if (0==a[i]) { count++; } } cout << count << endl; } return 0; }
描述 某校大門外長度為L的馬路上有一排樹,每兩棵相鄰的樹之間的間隔都是1米。我們可以把馬路看成一個數軸,馬路的一端在數軸0的位置,另一端在L的位置;數軸上的每個整數點,即0,1,2,……,L,都種有一棵樹。
由於馬路上有一些區域要用來建地鐵。這些區域用它們在數軸上的起始點和終止點表示。 已知任一區域的起始點和終止點的座標都是整數,區域之間可能有重合的部分。現在要把這些區域中的樹(包括區域端點處的兩棵樹)移走。聰明的小明幹了一件又一件事,他覺得這個很有意思,就想用計算機來幫助建築工人統計這些樹,現在任務來了,計算將這些樹都移走後,馬路上還有多少棵樹。
- 輸入
- 第一行是一個整數N表示有N組測試資料(1<=N<=100)
每組測試資料的第一行有兩個整數:L(1 <= L <= 10000)和 M(1 <= M <= 100),L代表馬路的長度,M代表區域的數目,L和M之間用一個空格隔開。接下來的M行每行包含兩個不同的整數,用一個空格隔開,表示一個區域的起始點和終止點的座標。 - 輸出
- 輸出包括一行,這一行只包含一個整數,表示馬路上剩餘的樹的數目。
- 樣例輸入
-
1 500 3 150 300 100 200 470 471
- 樣例輸出
-
298
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
int n, i, j, k,l,m,count;
int a[10001];
cin >> n;
while (n--)
{
count = 0;
memset(a, 0, sizeof(a));
cin >>j>>k;
for (i = 0; i < k; i++)
{
cin >> l >> m;
while (m >= l)
{
a[m] = 1;
m--;
}
}
for (i = 0; i <= j; i++)
{
if (0==a[i])
{
count++;
}
}
cout << count << endl;
}
return 0;
}