文章目录
- 一、题目
- 🎃题目描述
- 🎃输入输出
- 🎃样例1
- 🎃样例2
- 二、思路参考
- 三、代码参考
- 🏆C语言
- 作者:KJ.JK
🍂个人博客首页: KJ.JK
🍂专栏介绍: 华为OD机试真题汇总,定期更新华为OD各个时间阶段的机试真题,每日定时更新,本专栏将使用C语言进行更新解答,包含真题,思路分析,代码参考,欢迎大家订阅学习
一、题目
🎃题目描述
在一条笔直的公路上安装了N个路灯,从位置0开始安装,路灯之间间距固定为100米。
每个路灯都有自己的照明半径,请计算第一个路灯和最后一个路灯之间,无法照明的区间的长度和。
🎃输入输出
输入
在一条笔直的公路上安装了N个路灯,从位置0开始安装,路灯之间间距固定为100米。
每个路灯都有自己的照明半径,请计算第一个路灯和最后一个路灯之间,无法照明的区间的长度和。
输出
第一个路灯和最后一个路灯之间,无法照明的区间的长度和
🎃样例1
输入
4
50 70 20 70输出1
20说明:
路灯1 覆盖0-50
路灯2 覆盖30-170
路灯3 覆盖180-220
路灯4 覆盖230-370
🎃样例2
输入
2
50 50输出1
0说明:
路灯1覆盖0-50,路灯2覆盖50-100,路灯1和路灯2之间(0米-100米)无未覆盖的区间
二、思路参考
首先,根据输入的路灯个数N,以及照明半径数组,我们需要确定每个路灯的位置范围。
根据题目描述,路灯之间的间距固定为100米,所以可以计算出每个路灯的起始位置和终止位置。
然后,我们需要确定第一个路灯和最后一个路灯之间无法照明的区间。
如果第一个路灯的起始位置大于0,则第一个路灯前面的区间无法照明,长度为第一个路灯的起始位置。
如果最后一个路灯的终止位置小于100 * (N - 1),则最后一个路灯后面的区间无法照明,长度为100 * (N - 1) - 最后一个路灯的终止位置。
对于两个相邻的路灯i和i+1,如果路灯i+1的起始位置大于路灯i的终止位置,则这两个路灯之间存在无法照明的区间,长度为路灯i+1的起始位置减去路灯i的终止位置。
将以上计算得到的无法照明区间长度累加即可得到结果。
三、代码参考
🏆C语言
#include <stdio.h>int main() {int N;scanf("%d", &N);int radii[N];for (int i = 0; i < N; i++) {scanf("%d", &radii[i]);}int firstLampStart = 0;int lastLampEnd = 100 * (N - 1);int unlitInterval = 0;for (int i = 0; i < N; i++) {int lampStart = i * 100 - radii[i];int lampEnd = i * 100 + radii[i];if (i == 0 && lampStart > 0) {unlitInterval += lampStart;}if (i == N - 1 && lampEnd < lastLampEnd) {unlitInterval += lastLampEnd - lampEnd;}if (i > 0) {int prevLampEnd = (i - 1) * 100 + radii[i - 1];if (lampStart > prevLampEnd) {unlitInterval += lampStart - prevLampEnd;}}}printf("%d\n", unlitInterval);return 0;
}