一、审题
题目描述
小红上高中了。她在自己的妈妈的魔鬼训练下,成为了一个学霸,每次参加一次数学比赛必拿满分。每次她拿到一个满分后就很开心。假设小红不会因为其它事开心,并且她会持续开心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;
}