C语言 题目:校门外的树
题目来自洛谷P1047 [NOIP2005 普及组] 校门外的树
题目描述
某校大门外长度为 l 的马路上有一排树,每两棵相邻的树之间的间隔都是 1 米。我们可以把马路看成一个数轴,马路的一端在数轴 0 的位置,另一端在 l 的位置;数轴上的每个整数点,即 0,1,2,…,l,都种有一棵树。
由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。
输入格式
第一行有两个整数,分别表示马路的长度 l 和区域的数目 m。
接下来 m 行,每行两个整数 u,v,表示一个区域的起始点和终止点的坐标。
输出格式
输出一行一个整数,表示将这些树都移走后,马路上剩余的树木数量。
输入输出样例
输入
500 3 150 300 100 200 470 471
输出
298
#include <stdio.h> int c[10001]; //在函数外建立数组,在函数内由于数组过大无法建立 int main (void) { int l, m; //l马路的长度,m建地铁区域的数目 c[0] = 0; //数组赋初始值 int n = 0; //剩余的长度 scanf_s("%d%d", &m,&l); int a[100]={0}, b[100] = {0}; //建立数组为100个,建地铁区域的数目最大100个 for (int i = 0; i < l; i++) { scanf_s("%d%d", &a[i], &b[i]); //输入地铁起始a[i],地铁终止b[i] for (int j = a[i]; j <= b[i]; j++) c[j] = 1; //将起始到终止(包括端点)的值建立为所对应的数组挨个赋值为1 } for (int i = 0; i <= m; i++) //判断数组是否为0,为0则说明该位置不在建地铁的范围内 { if (c[i] == 0) n++; } printf("%d",n); //输出n return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)