天天看點

資訊學奧賽一本通 1107:校門外的樹 | 1931:【05NOIP普及組】校門外的樹 | OpenJudge NOI 1.6 06

【題目連結】

ybt 1107:校門外的樹

ybt 1931:【05NOIP普及組】校門外的樹

OpenJudge NOI 1.6 06:校門外的樹

【題目考點】

1. 數組

2. 模拟

【解題思路】

用數組模拟各位置是否有樹

  • 設布爾類型數組a,a[i]表示第i位置是否有樹
  • 先将0~L的位置都設為有樹,把對應數組元素設為true
  • 把每個劃定的區域設為無樹,把對應數組元素設為false
  • 最後統計還剩下多少樹,即數組a的0~L的位置中,還有多少個元素為true。

【題解代碼】

解法1:

#include <bits/stdc++.h>
using namespace std;
int main()
{
    bool a[10005];//如果位置i有樹,a[i]儲存為true,否則儲存為false
	int l, m, start, end, s = 0;//s:樹木數量統計 
	cin>>l>>m;
	for(int i = 0; i <= l; ++i)//a[0]~a[m]先設為有樹 
		a[i] = true;
	for(int i = 0; i < m; ++i)//m個區域 
	{
		cin>>start>>end;//輸入每個區域的起始點和終止點 
		for(int j = start; j <= end; ++j)//a[start]到a[end]設為無樹 
			a[j] = false;
	}
	for(int i = 0; i <= l; ++i)
	{
		if(a[i])
			s++;//或将這兩行寫為 s += a[i]; 
	}
	cout<<s;
    return 0;
}