P1047 [NOIP2005 普及组] Bailian2808 校门外的树【标记+差分】

2024-04-08 20:18

本文主要是介绍P1047 [NOIP2005 普及组] Bailian2808 校门外的树【标记+差分】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2808:校门外的树
描述
某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米。我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置;数轴上的每个整数点,即0,1,2,……,L,都种有一棵树。
马路上有一些区域要用来建地铁,这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。
输入
输入的第一行有两个整数L(1 <= L <= 10000)和 M(1 <= M <= 100),L代表马路的长度,M代表区域的数目,L和M之间用一个空格隔开。接下来的M行每行包含两个不同的整数,用一个空格隔开,表示一个区域的起始点和终止点的坐标。
输出
输出包括一行,这一行只包含一个整数,表示马路上剩余的树的数目。
样例输入
500 3
150 300
100 200
470 471
样例输出
298
来源
noip2005普及组

问题链接:Bailian2808 校门外的树
问题描述:(略)
问题分析
  这是一个简单的问题,用一个数组标记一下树就可以了。需要移走的树也做过标记,然后再统计一下就得到结果了。关键是能否想到使用标记数组。
程序说明
  C语言程序中,标记数组tree[]使用char类型最为节省存储。如果使用C++语言编程则可以使用bool类型的数组。
  为了在初始化数组tree[]时避免对整个数组进行初始化,使得初始化单元的数量更少,在读入l值后再进行初始化。通常的写法是"memset(tree, TRUE, sizeof(tree));"。
另外一种解法是差分法,整个数轴需要向右移动一个位置,因为需要处理0-L之间的数。
参考链接:(略)
题记:使用宏定义可以使得程序更加易于阅读。

AC的C语言程序(差分)如下:

/* Bailian2808 校门外的树 */#include <stdio.h>
#include <string.h>#define L 10000 + 3
int d[L], cnt[L];int main(void)
{int l, m, i;scanf("%d%d", &l, &m);memset(d, 0, l + 3);for(i = 1; i <= m; i++) {int start, end;scanf("%d%d", &start, &end);d[start + 1]++, d[end + 2]--;}int cnt2 = 0;cnt[0] = 0;for(i = 1; i <= l + 1; i++)if ((cnt[i] = cnt[i - 1] + d[i]) > 0)cnt2++;printf("%d\n", l + 1 - cnt2);return 0;
}

AC的C语言程序如下:

/* Bailian2808 校门外的树 */#include <stdio.h>
#include <string.h>#define TRUE 1
#define FALSE 0
#define L 10000char tree[L + 1];int main(void)
{int l, m, i, j;scanf("%d%d", &l, &m);memset(tree, TRUE, l + 1);for(i = 1; i <= m; i++) {int start, end;scanf("%d%d", &start, &end);for(j = start; j <= end; j++)tree[j] = FALSE;}int cnt = 0;for(i = 0; i <= l; i++)if(tree[i]) cnt++;printf("%d\n", cnt);return 0;
}

这篇关于P1047 [NOIP2005 普及组] Bailian2808 校门外的树【标记+差分】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/886383

相关文章

poj 3159 (spfa差分约束最短路) poj 1201

poj 3159: 题意: 每次给出b比a多不多于c个糖果,求n最多比1多多少个糖果。 解析: 差分约束。 这个博客讲差分约束讲的比较好: http://www.cnblogs.com/void/archive/2011/08/26/2153928.html 套个spfa。 代码: #include <iostream>#include <cstdio>#i

poj 3169 spfa 差分约束

题意: 给n只牛,这些牛有些关系。 ml个关系:fr 与 to 牛间的距离要小于等于 cost。 md个关系:fr 与 to 牛间的距离要大于等于 cost。 隐含关系: d[ i ] <= d[ i + 1 ] 解析: 用以上关系建图,求1-n间最短路即可。 新学了一种建图的方法。。。。。。 代码: #include <iostream>#include

POJ 1364差分约束

给出n个变量,m个约束公式 Sa + Sa+1 + .... + Sa+b < ki or > ki ,叫你判断是否存在着解满足这m组约束公式。 Sa + Sa+1   +   .+ Sa+b =  Sum[a+b] - Sum[a-1]  . 注意加入源点n+1 。 public class Main {public static void main(Strin

脏页的标记方式详解

脏页的标记方式 一、引言 在数据库系统中,脏页是指那些被修改过但还未写入磁盘的数据页。为了有效地管理这些脏页并确保数据的一致性,数据库需要对脏页进行标记。了解脏页的标记方式对于理解数据库的内部工作机制和优化性能至关重要。 二、脏页产生的过程 当数据库中的数据被修改时,这些修改首先会在内存中的缓冲池(Buffer Pool)中进行。例如,执行一条 UPDATE 语句修改了某一行数据,对应的缓

三色标记(Tri-color marking)

维基百科部分 原文 https://en.wikipedia.org/wiki/Tracing_garbage_collection#TRI-COLOR Because of these performance problems, most modern tracing garbage collectors implement some variant of the tri-color ma

Python中差分进化differential_evolution的调用及参数说明

在场景应用中,要求我们的函数计算结果尽可能的逼近实际测量结果,可转化计算结果与测量结果的残差,通过最小化残差,便可求出最优的结果。但使用最小二乘等方法来计算时,常常会使迭代的结果显然局部最优点而导致结算错误。 差分进化原理 差分进化(Differential Evolution,DE)是一种基于群体差异的进化算法,其计算思想主要包括以下几个方面: 一、初始化种群 首先,随机生成一个初始种群

笔试强训,[NOIP2002普及组]过河卒牛客.游游的水果大礼包牛客.买卖股票的最好时机(二)二叉树非递归前序遍历

目录 [NOIP2002普及组]过河卒 牛客.游游的水果大礼包 牛客.买卖股票的最好时机(二) 二叉树非递归前序遍历 [NOIP2002普及组]过河卒 题里面给的提示很有用,那个马的关系,后面就注意,dp需要作为long的类型。 import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息publ

【造轮子】纯C++实现的联通组件标记算法

学习《OpenCV应用开发:入门、进阶与工程化实践》一书 做真正的OpenCV开发者,从入门到入职,一步到位! 连接组件标记算法 连接组件标记算法(connected component labeling algorithm-CCL)是图像分析中最常用的算法之一,算法的实质是扫描一幅图像的每个像素,对于像素值相同的分为相同的组(group),最终得到图像中所有的像素连通组件。扫描的方式可以是从

python画图|垂线标记系列

进行了一段时间的直方图学习之后,发现python的matplo居然还支持画垂线标记图,赶紧把它记录下来。 直方图绘制教程见下述链接: 【a】直方图绘制基础教程:python画图|直方图绘制教程-CSDN博客 【b】 直方图绘制进阶教程:python画图|直方图绘制教程进阶-CSDN博客 【c】 堆叠直方图绘制教程:python画图|堆叠直方图绘制-CSDN博客 【d】并列直方图绘制教程:

鸿蒙(API 12 Beta6版)超帧功能开发【顶点标记】

超帧提供两种运动估计模式供开发者选择:分别为基础模式和增强模式。其中增强模式需要对绘制顶点的Draw Call命令进行额外的标记,在相机和物体快速运动的游戏场景超帧效果较基础模式更优,能够有效改善拖影问题。本章主要介绍增强模式的运动估计原理及顶点标记方法。 说明 Draw Call:指图形驱动库(OpenGL ES)中进行绘制的命令,例如glDrawElements、glDrawArrays、