持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第17天,点击查看活动详情。
题目信息描述
小明在电脑上持续录入 nn 个单词。
其中,第 ii 个单词在第 titi 秒录入电脑。
一个单词录入完毕后,如果连续 cc 秒都没有录入新的单词,则屏幕将会刷新,屏幕中所有单词都被清空。
具体来说,如果前一个单词在第 aa 秒录入,后一个单词在第 bb 秒录入,那么:
- 如果 b−a≤cb−a≤c,则将后一个单词附加到屏幕中其他单词的后面。
- 如果 b−a>cb−a>c,则前面的所有单词都会消失,屏幕中只会保留最后一个单词。
请你计算,当所有单词录入完毕时,屏幕中共有多少个单词。
例如,当 n=6,c=5n=6,c=5,每个单词的录入时间依次为 1,3,8,14,19,201,3,8,14,19,20 时,注意以下几个时间点:
- 第 88 秒时,屏幕中有三个单词。
- 第 1313 秒时,屏幕中所有单词清空。
- 第 1414 和 1919 秒,屏幕中各添加一个单词。
- 第 2020 秒时,屏幕再添一个单词,全部单词录入完毕,此时屏幕中共有 33 个单词。
输入格式
第一行包含两个整数 nn 和 cc。
第二行包含 nn 个整数 t1,t2,…,tnt1,t2,…,tn。
输出格式
输出一个整数,表示当所有单词录入完毕时(即第 tntn 秒时),屏幕中存在的单词数量。
数据范围
1≤n≤1051≤n≤105, 1≤c≤1091≤c≤109, 1≤t1<t2<…<tn≤1091≤t1<t2<…<tn≤109。
输入样例1:
6 5
1 3 8 14 19 20
输出样例1:
3
输入样例2:
6 1
1 3 5 7 9 10
输出样例2:
2
思路
屏幕上的单词在指定时间范围内未输入时被刷新,则屏幕上能够保留的单词则是由最后面往前排的.那么屏幕上单词的展示数量是由后往前的第一个产生(t[i]-t[i-1])>c情况的位置决定.
代码
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
int d[N],a[N];
void solve()
{
int n,c;
cin>>n>>c;
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=1;i<=n;i++)
d[i] = a[i]-a[i-1];
int ans = 0 ;
int p = 0;
for(int i=1;i<=n;i++)
{
if(d[i]>c)
p = i;
}
if(p==0)
cout<<n<<endl;
else
cout<<n-p+1<<endl;
}
int main(void)
{
ios::sync_with_stdio(false);
solve();
}