题目描述
感应门会在有人经过的时候自动打开,冷却 d 秒后自动关闭。如果有人在感应门打开的状态下通过,那么冷却时间会重置,重新冷却 d 秒后再关闭。
在一段时间内,有 n 个人陆续通过了感应门,他们通过感应门的时间点分别是 t1,t2,⋯,tn,请计算感应门一共开放了多少时间。
输入格式
第一行:两个整数 n 与 d,n 表示通过感应门的人数,d 表示感应门的冷却时间。
第二行:t1,t2,⋯,tn,每个数字表达一个人通过感应门的时间点。
输出格式
单个整数,表示感应门总共开启了多少时间。
数据范围
- 对于 50%50% 的数据,1≤n≤1000;
- 对于 100%100% 的数据,1≤n≤100,000;
- 1≤t1≤t2≤t3≤⋯≤tn≤1,000,000,000;
- 1≤d≤1,000,000,000。
样例数据
输入:
7 3
1 2 7 10 15 17 22
输出:
18
题解
本题关键点:
1. 计算后面减去前面的差值
2. 最后一个直接+d
代码如下。
#include <iostream>
using namespace std;
int main(){int n,d,ans;ans=0;cin>>n>>d;int a[n];for(int i=0;i<n;i++){cin>>a[i];}//计算后面减去前面的差值 for(int j=0;j<n;j++){//j+1不能大于数组的长度 if(j+1<=n){//最后一个直接+d if(a[j+1]-a[j]>=d || j+1==n){ans+=d;}else{ans+=a[j+1]-a[j];}} }cout<< ans << endl;return 0;
}