上海计算机学会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)!