#include <bits/stdc++.h>
#define int long long
using namespace std;
#define endl '\n'
void work()
{
int n , x ; cin >> n >> x ;
vector<int>a(n + 1 , -999);
for(int i = 1 ; i <= n ; i++)
{
cin >> a[i];
}
vector<int>b = a ; //把代码分解成为两个部分,一部分用于计算使结果最大情况,一部分用于记录最小情况
int maxi = 0 ; //记录最大值
int minn = 0 ; //记录最小值
for(int i = 1 ; i <= n ; i++)
{
if(i == 1 && a[i] == -999)//首先对于第一个数字进行检验,因为第一个数字前面没有数字,所以为-999时,应该尽量为后来做贡献
{
a[i] = 50 ;
}
else
{
if(a[i] != -999 && a[i - 1] != -999)//遇到最为普遍的情况时
{
if(a[i - 1] - a[i] >= x)
{
maxi++;
}
}
if(a[i] == -999)//当遇到-999时
{
if(a[i - 1] - x >= -50)//如果它可以为前面做贡献时,尽可能让他为前面做贡献
{//由于想要尽量为后来做贡献,所以刚刚达到标准即可
a[i] = a[i - 1] - x ;
maxi++;
}
else//发现不能为前面做贡献,所以为后来做准备
{
a[i] = 50 ;
}
}
}
}
//同理
for(int i = 1 ; i <= n ; i++)
{
if(i == 1 && b[i] == -999)
{
b[i] = -50 ;
}
else
{
if(b[i] != -999 && b[i - 1] != -999 && b[i - 1] - b[i] >= x)
{
minn++;
}
if(b[i] == -999)
{
if(b[i - 1] - x + 1 >= -50)
{
b[i] = b[i - 1] - x + 1 ;
}
else
{
b[i] = -50 ;
}
}
}
}
cout << maxi << " " << minn << endl ;
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t = 1 ;
while(t--)
{
work();
}
return 0 ;
}
由于数据量较小的原因,我们可以采取这种做法

京公网安备 11010502036488号