录入单词

194 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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();
​
}
​