题意
给一行数有n个,对于每个数可以增大1,也可以减小1,也可以不变,要求修改后必须是正整数,不可为0。将修改后的数去重,问最多有几个?
#include <bits/stdc++.h>
using namespace std;
int n,a[150005],vis[150005],cnt;
int main()
{
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",a+i);
sort(a,a+n);
for(int i=0;i<n;i++)
{
if(a[i]>1&&!vis[a[i]-1]){//如果可以左移,并且左边没有访问过
vis[a[i]-1] = 1;
cnt++;
continue;
}
if(vis[a[i]]){//如果当前已访问过,就右移
a[i]++;
}
if(!vis[a[i]]){//如果没有访问过,答案增加1
vis[a[i]] = 1;
cnt++;
}
}
printf("%d",cnt);
return 0;
}