https://codeforces.com/problemset/problem/1203/E
题目大意:给
n
n
n个数,每个数可以做两种变化:(1)
+
1
+1
+1;(2)
−
1
-1
−1;或者不变,你可以对序列任意变化,问最多可以得到几个不同的数。
思路:贪心,对序列从小到大排序,尽量先做 − 1 -1 −1操作。
#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
#define pr pair<int,int>
typedef long long ll;
using namespace std;
const int maxn=15*1e4+5;
int n,len;
int b[maxn];
bool vis[maxn];
int main()
{
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",&b[i]);
sort(b,b+n);
for(int i=0;i<n;i++)
{
if(b[i]>1&&!vis[b[i]-1])
vis[b[i]-1]=1;
else if(!vis[b[i]])
vis[b[i]]=1;
else
vis[b[i]+1]=1;
}
int ans=0;
for(int i=1;i<=b[n-1]+1;i++)
ans+=vis[i];
printf("%d\n",ans);
return 0;
}