C++知识点总结(22):模拟算法真题 ★★★★★《开心的小红》

一、审题

题目描述

小红上高中了。她在自己的妈妈的魔鬼训练下,成为了一个学霸,每次参加一次数学比赛必拿满分。每次她拿到一个满分后就很开心。假设小红不会因为其它事开心,并且她会持续开心T 天(包含获奖当天,就算在开心的时候再次拿到满分,她也只能维持开心包括这次拿奖之日起 T T T 天,而不是额外增加 T T T 天的开心时间,除非之后再拿奖)。请你帮忙检查一下小红接下来的的日程安排,要参加 n n n 场比赛,看看接下来的几天,小红会累计开心多久?

输入描述

第一行两个整数 n n n 和 T T T。接下来一行, n n n 个单调递增整数 t i t_i ti,表示她在第 t i t_i ti​ 天的时候拿了一个满分。

输出描述

一个整数表示,小红累计开心多久。

样例1

输入

复制代码
3 5
1 2 10

输出

复制代码
11

提示

对于 100 % 100\% 100% 的数据,保证:
1 ≤ n ≤ 1 × 1 0 4 1≤n≤1\times10^4 1≤n≤1×104
1 ≤ T ≤ 32767 1≤T≤32767 1≤T≤32767
1 ≤ t i ≤ 32767 1≤t_i≤32767 1≤ti≤32767

二、思路

主要说一下计算时间的方法:

  • 判断是否拿奖日期间隔大于等于 T T T
  • 如果上面的条件成立,那么拿奖当天及接下来的 T T T 天都是开心的
  • 否则拿奖当天及接下来的开心时长为拿奖日期间隔

三、参考答案

cpp 复制代码
#include <iostream>
using namespace std;

int main()
{
    int n, T;
    int total = 0;
    int ti[10005] = {};
    
    cin >> n >> T;
    for (int i = 1; i <= n; i++)
    {
        cin >> ti[i];
        if (i == 1 || ti[i] - ti[i-1] >= T)
        {
            total += T;
        }
        else
        {
            total += ti[i] - ti[i-1];
        }
    }
    
    cout << total;
    return 0;
}
相关推荐
CoovallyAIHub5 小时前
181小时视频丢给GPT-5,准确率只有15%——南大联合NVIDIA等五校发布多模态终身理解数据集
深度学习·算法·计算机视觉
CoovallyAIHub5 小时前
CVPR 2026 | GS-CLIP:3D几何先验+双流视觉融合,零样本工业缺陷检测新SOTA,四大3D工业数据集全面领先!
深度学习·算法·计算机视觉
xlp666hub5 小时前
Leetcode 第三题:用C++解决最长连续序列
c++·leetcode
会员源码网7 小时前
构造函数抛出异常:C++对象部分初始化的陷阱与应对策略
c++
有意义7 小时前
深度拆解分割等和子集:一维DP数组与倒序遍历的本质
前端·算法·面试
xlp666hub9 小时前
Leetcode第二题:用 C++ 解决字母异位词分组
c++·leetcode
用户726876103379 小时前
解放双手的健身助手:基于 Rokid AR 眼镜的运动计时应用
算法
Wect9 小时前
LeetCode 17. 电话号码的字母组合:回溯算法入门实战
前端·算法·typescript
不想写代码的星星9 小时前
static 关键字:从 C 到 C++,一篇文章彻底搞懂它的“七十二变”
c++
xlp666hub1 天前
Leetcode第一题:用C++解决两数之和问题
c++·leetcode