顺子对子,前两个优先找对子,第三个优先考虑顺子
#include<cstdio>
#include<cstring>
using namespace std;
const int N=1e6+5;
int a[N];
int main(){
int n;
int val,ans;
while(~scanf("%d",&n)){
ans=0;
memset(a,0,sizeof(a));
for(int i=1;i<=n;i++){
scanf("%d",&val);
a[val]++;
}
for(int i=1;i<=n;i++){
ans+=a[i]/2; //对子优先
a[i]%=2;
if(a[i]&&a[i+1]%2&&a[i+2]&&i+1<n){ //第三个数顺子优先
ans++;
a[i]--;
a[i+1]--;
a[i+2]--;
}
}
printf("%d\n",ans);
}
return 0;
}