我们可以对 x i x_i xi做加 1 1 1的操作,我们思考一下操作和不操作的效果:
-
若 x i = x i − 1 x_i=x_{i-1} xi=xi−1,则对 x i x_i xi加 1 1 1可以使它们不相等,使得答案增加,而不操作则不会影响答案,因此操作优于不操作;
-
若 x i ≠ x i − 1 x_i\ne x_{i-1} xi=xi−1,则加 1 1 1可能会减小或不影响答案,而不操作一定不影响答案,因此不操作优于操作;
所以我们得出了这样的算法:
-
若 x i = x i − 1 x_i=x_{i-1} xi=xi−1, x i x_i xi加 1 1 1;
-
若 x i ≠ x i − 1 x_i\ne x_{i-1} xi=xi−1,则不进行操作。
C o d e Code Code
#include<iostream>
#include<cstdio>
using namespace std;
int T;
int n,ans;
int x[100010];
int main()
{
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
ans=0;
for(int i=1;i<=n;i++)
scanf("%d",&x[i]);
for(int i=2;i<=n;i++)
if(x[i]<=x[i-1])
x[i]++;
for(int i=1;i<=n;i++)
if(x[i]!=x[i-1])
ans++;
printf("%d\n",ans);
}
return 0;
}