題意
給一行數有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;
}