给定N个数字,每个数字可以加一或者减一
使得结果集合中不同数字个数最多
贪心
用桶装数
假如相同的数字$i$超过三个,则上面$i+1$,下面$i-1$都可以分一个
如果相同数字$i$只有两个,优先$i-1$
如果只有一个也要优先$i-1$
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define sc(x) scanf("%I64d",&x); #define read(A) for(int i=0;i<4*N;i++) scanf("%I64d",&A[i]); #define P pair<ll,ll> ll N; ll q; ll A[150005]; bool B[150005]; int main() { sc(N); for(int i=0; i<N; i++) { sc(q); A[q]++; } for(int i=1; i<=150001; i++) { if(A[i]>=3) { if(i>1) { // A[i-1]++; B[i-1]=1; } B[i]=1; B[i+1]=1; } else if(A[i]==2) { if(i>1&&B[i-1]==0) { B[i-1]=1; } else if(B[i+1]==0) { B[i+1]=1; } B[i]=1; } else if(A[i]==1) { //cout<<i<<B[i]<<endl; if(i>1&&B[i-1]==0)B[i-1]=1; else if(B[i]==1)B[i+1]=1; else B[i]=1; } } int ans=0; for(int i=1; i<=150001; i++) { if(B[i]){ans++;//cout<<i<<endl; } } cout<<ans<<' '; }