我们可以对xix_ixi做加111的操作,我们思考一下操作和不操作的效果:
-
若xi=xi−1x_i=x_{i-1}xi=xi−1,则对xix_ixi加111可以使它们不相等,使得答案增加,而不操作则不会影响答案,因此操作优于不操作;
-
若xi≠xi−1x_i\ne x_{i-1}xi=xi−1,则加111可能会减小或不影响答案,而不操作一定不影响答案,因此不操作优于操作;
所以我们得出了这样的算法:
-
若xi=xi−1x_i=x_{i-1}xi=xi−1,xix_ixi加111;
-
若xi≠xi−1x_i\ne x_{i-1}xi=xi−1,则不进行操作。
CodeCodeCode
#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;
}
这篇博客探讨了一种针对序列的操作策略,当遇到相邻元素相等时对后者加1,以增加序列中不同元素的数量。通过这种方式,可以有效地调整序列,增加答案的计数。代码示例展示了如何实现这一算法,并在每个循环中检查相邻元素是否相等,以决定是否执行加1操作。最终,程序输出不同元素的数量作为答案。
312

被折叠的 条评论
为什么被折叠?



