题目分析:
样例输入包括两大组输入,第一行表示第一次总共有4棵树,接下来的两行是要砍掉树的区间,第四行表示第二次总共有11棵树,接下来的两行是要砍掉树的区间,最后一行连续两个零表示输入结束。
解答:
#include <cstdio>
#include <cstring>
#include <cstdlib>
using namespace std;
//将给定数组中,位于参数代表的区间中的元素置为0
void cutdown(int* target, int left, int right) {
for(int i=left; i<=right; i++)
target[i] = 0;
}
//打印所有位置上的树
void print_tree(int* a, int amount) {
printf("tree: ");
for(int i=0; i<amount; i++) {
printf("%d ", a[i]);
}
printf("\n");
}
//数出有多少棵树的状态是1
int count1(int* a, int end) {
int result = 0;
for(int i=0; i<=end; i++) {
if(a[i]==1)
result++;
}
return result;
}
int main() {
int L, M;
while(scanf("%d %d", &L, &M) != EOF) {
if(L == 0 && M == 0)
break;
int tree[10000];
//初始化L棵树为1
for(int i=0; i<=L; i++)
tree[i] = 1;
while(M--) { //读取接下来的M行
int left, right;
scanf("%d %d", &left, &right);
cutdown(tree, left, right); //将left和right之间的元素置为0
}
printf("%d\n", count1(tree, L));
}
return 0;
}