洛谷P1047 [NOIP2005 普及组]校门外的树


思路:

这道题我的想法非常简单,就是暴力遍历,定义一个大小为10000的数组

因为这道题中的马路长度L的最大值仅仅为10000,挨个遍历最坏的情况也就是遍历1遍大小为1000的数组,故而影响不大

先将数组中的元素全部初始化为1,然后在每行输入u,v时,从u到v遍历数组,让数组中的值,从flag[u]-flag[v](包括端点),让它们的值变为2(方便后续查找剩余多少棵树)

再经历m轮输入u,v之后。在u-v区间内的数组的值,都变为2。我们只要计算数组中有多少个1,这个答案就是最终的结果。

具体可以编译运行的代码如下:

#include<iostream>
#include<cstring>
using namespace std;
#define MAX_L 10000
int main()
{
int L, m;
cin >> L >> m;
int flag[MAX_L];
memset(flag, 0, sizeof(flag));
//将数组元素全部初始化为1
for (int i = 0; i <= L; i++) flag[i] = 1;
//循环m轮,每轮都输入u,v。并让flag[u]-flag[v]之间的所有值都变为2
for (int i = 0; i < m; i++) {
int u, v;
cin >> u >> v;
for (int j = u; j <= v; j++) flag[j] = 2;
}
//用于存储有多少棵树
int count = 0;
for (int i = 0; i <= L; i++) {
if (flag[i] == 1) count++;
}
cout << count;
return 0;
}
posted @   Tomorrowland_D  阅读(29)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示