题解:P1047 [NOIP2005 普及组] 校门外的树
思路
我们发现这道题和这道题差不多,变成了这样:一幅完整的牌有 $l$ 张,我们最初有 $l$ 张,我们要丢 $m$ 次牌,每次从 $u$ 丢到 $v$,问丢完后我们手里还有多少张。
如果你还是不会做,那你就继续往下看。
我们不妨定义一个数组,存储这条马路上的树是否被砍了。
初始都设为 $0$,即没有被砍走。我们可以定义全局变量存储数组,这样数组就会默认清零。
每次读入到 $u$ 和 $v$,就从 $u$ 循环至 $v$,把这一段的所有都标记为 $1$,即被砍走了。
最后在循环一次统计还有哪些位置是 $1$ 即可。
注意下标从 $0$ 开始。
代码
#include <bits/stdc++.h>
#define endl '\n'
using namespace std;
bool t[10005];
int l, m, u, v, ans;
int main()
{
cin >> l >> m;
while (m--)
{
cin >> u >> v;
for (int i = u; i <= v; i++)
t[i] = true;
}
for (int i = 0; i <= l; i++)
{
if (!t[i])
ans++;
}
cout << ans << endl;
return 0;
}