当前位置:首页 > 题解目录 > 正文内容

【题解】感应门

亿万年的星光2年前 (2024-07-16)题解目录1915

【题目描述】

感应门会在有人经过的时候自动打开,冷却d 秒后自动关闭。如果有人在感应门打开的状态下通过,那么冷却时间会重置,重新冷却d秒后再关闭。

在一段时间内,有 n个人陆续通过了感应门,他们通过感应门的时间点分别是t1,t2,⋯,tn,请计算感应门一共开放了多少时间。

【输入描述】

第一行:两个整数n与d,n表示通过感应门的人数,d表示感应门的冷却时间。
第二行:n个整数t1,t2,⋯,tn,每个数字表达一个人通过感应门的时间点。

【输出描述】

单个整数,表示感应门总共开启了多少时间。

【样例输入】

7 3
1 2 7 10 15 17 22

【样例输出】

18

【数据范围】

对于 50% 的数据,1≤n≤1000;
对于 100% 的数据,1≤n≤100,000;
1≤t1≤t2≤t3≤⋯≤tn≤1,000,000,000;
1≤d≤1,000,000,000。

【题目分析】

生活中的感应门,如果长时间没有人走过,那么就会关闭,如果中间有人走过,那么就一直保持开启状态,直到没有人经过。

每次有人经过门,就会重置关闭时间。

如果当前的人和前一个人经过门的时间大于等于d,那么就冷却d秒关闭。如果没有大于等于d秒,那么时间就被重置

对于样例来说,7个人,经过门的时间分别是1 2  7  10 15 17 22。

门冷却时间是3秒。


```

  1. 如果有人的时间点,首先将第一个人的时间点算进去。

  2. 遍历每个人的时间点:

    • 如果当前时间大于等于上次门关闭的时间,则表示门已经关闭,增加 d 到总开启时间。

    • 如果当前时间小于上次门关闭的时间,则表示门仍然开启,增加当前时间和上次时间的差值到总开启时间。

    • 更新感应门的关闭时间为当前人的通过时间加 d



【参考代码】

#include <bits/stdc++.h>
using namespace std;
int times[10000];
int main() {
    int n, d;
    cin >> n >> d;
    for (int i = 0; i < n; i++) {
        cin >> times[i];
    }
    // 计算感应门总共开启时间
    int total_open_time = 0;
    if (n > 0) {
        int end_time = times[0] + d;  // 第一个人经过时感应门会打开并计算关闭时间
        total_open_time = d;
        for (int i = 1; i < n; i++) {
            if (times[i] >= end_time) {
                total_open_time += d;  // 如果两人经过的时间间隔大于等于d,感应门会重新冷却
            } else {
                total_open_time += times[i] - times[i - 1];  // 否则感应门保持打开状态
            }
            end_time = times[i] + d;  // 更新关闭时间
        }
    }
    cout << total_open_time << endl;
    return 0;
}


    扫描二维码推送至手机访问。

    版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。

    分享给朋友:

    相关文章

    因子分解

    【题目描述】输入一个数,输出其素因子分解表达式。【输入描述】输入一个整数 n (2≤n<100)。【输出描述】输出该整数的因子分解表达式。表达式中各个素数从小到大排列。如果该整数可以分解出因子a...

    【题解】金银岛

    题目描述某天KID利用飞行器飞到了一个金银岛上,上面有许多珍贵的金属,KID虽然更喜欢各种宝石的艺术品,可是也不拒绝这样珍贵的金属。但是他只带着一个口袋,口袋至多只能装重量为w的物品。岛上金属有s个种...

    【题解】发工资

    【题目描述】作为程序猿,最盼望的日子就是每月的9号了,因为这一天是发工资的日子,养家糊口就靠它了,呵呵但是对于公司财务处的工作人员来说,这一天则是很忙碌的一天,财务处的小李最近就在考虑一个问题:如果每...

    【题解】红与黑

    【题解】红与黑

    【题目描述】有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动。请写一个程序,计算你总共能够到达多少块黑色的瓷砖。【输入】包括多组数据。每...

    分数求和

    题目描述】输入n个分数并对他们求和,并用最简形式表示。所谓最简形式是指:分子分母的最大公约数为1;若最终结果的分母为1,则直接用整数表示。如: 5/6  、 10/3  均是最简形...

    【题解】翻手算法

    翻手算法(fanshou.cpp) 【问题描述】 ⼩酷爱算法,他在编程珠玑⼀书中了解到了⼀种新的算法——翻⼿算法,为了更好的理解算 法,⼩明找来⼀叠纸牌,每⼀张纸牌上只有⼀个⼤写或...