感应门(c++)

开学了,更新会慢一点,不要生气(#^.^#)

感应门

题目描述

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值