开学了,更新会慢一点,不要生气(#^.^#)
感应门
题目描述
感应门会在有人经过的时候自动打开,冷却$d$秒后自动关闭。如果有人在感应门打开的状态下通过,那么冷却时间会重置,重新冷却$d$秒后再关闭。
在一段时间内,有$n$个人陆续通过了感应门,他们通过感应门的时间点分别是$t_1,t_2,⋯,t_n$,请计算感应门一共开放了多少时间。
输入描述
第一行:两个整数$n$与$d$,$n$表示通过感应门的人数,$d$表示感应门的冷却时间。
第二行:$n$个整数$t_1,t_2,⋯,t_n$,每个数字表达一个人通过感应门的时间点。
数据范围
- 对于$50%$的数据,$1≤n≤1000$;
- 对于$100%$的数据,$1≤n≤100,000$;
- $1≤t_1≤t_2≤t_3≤⋯≤t_n≤1,000,000,000$;
- $1≤d≤1,000,000,000$。
输出描述
单个整数,表示感应门总共开启了多少时间。
输入样例
7 3
1 2 7 10 15 17 22
输出样例
18
#include <iostream>
using namespace std;
int main(){
int n, d;
cin >> n >> d;
const int MAX_SIZE = 100000; // 定义一个足够大的常量作为数组的大小
int t[MAX_SIZE]; // 使用足够大的数组
for (int i = 0; i < n; i++) {
cin >> t[i];
}
int openTime = 0;
for (int i = 0; i < n; i++) {
if (i == 0) {
openTime += d;
}
else {
if (t[i] - t[i-1] >= d) {
openTime += d;
}
else {
openTime += t[i] - t[i-1];
}
}
}
std::cout << openTime << std::endl;
return 0;
}