解题思路:

1、使用数组模拟树

2、有树的位置为1,移除树的位置为0

3、统计最后为 1 的位置的数目,即为最后剩余树的数目

注意事项:

参考代码:

#include<iostream>
using namespace std;

class Tree
{
public:
        //定义树
	int *tree;
	//树的个数
	int L;
	//构造函数初始化树对象
	Tree(int num)
	{
		tree = new int [num+1];
		L = num+1;
	}
	//析构函数清内存
	~Tree()
	{
		delete [] tree;
	}
};

//初始化树为 1
void setTreeOne(Tree *T)
{
	int i = 0;
	for(i = 0; i < T->L; i++)
		T->tree[i] = 1;
}

//把要移除的树设为 0
void setTreeZero(Tree *T, int ns, int ne)
{
	int i = 0;
	for(i = ns; i <= ne; i++)
		T->tree[i] = 0;
}

//获取剩余树的个数
int getTreeNum(Tree *T)
{
	int sum=0, i;
	for(i = 0; i < T->L; i++)
	{
		if(T->tree[i] == 1)
			sum+=1;
	}
	return sum;
}

int main()
{
	int L, M;
	int ns, ne;
	cin>>L>>M;
	Tree T(L);
	setTreeOne(&T);
	while(M)
	{
		cin>>ns>>ne;
		setTreeZero(&T, ns, ne);
		M--;
	}
	cout<<getTreeNum(&T)<<endl;
	return 0;
}


 

0.0分

10 人评分

  评论区

  • «
  • »