自学内容网 自学内容网

上海计算机学会2020年7月月赛C++丙组T2感应门

题目描述

感应门会在有人经过的时候自动打开,冷却 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;
}


原文地址:https://blog.csdn.net/winterling/article/details/138021943

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!