英雄卡

题目描述
小李非常迷恋收集各种干脆面里面的英雄卡,为此他曾经连续一个月都只吃干脆面这一种零食,但是有些稀有英雄卡真的是太难收集到了。后来某商场搞了一次英雄卡兑换活动,只要你有三张编号连续的英雄卡,你就可以换任意编号的英雄卡。小李想知道他最多可以换到几张英雄卡(新换来的英雄卡不可以再次兑换)。

输入
第一行,共一个整数n(1<=n<=10000),表示小李拥有的英雄卡数。
第二行,共n个空格隔开的数字ai(1<=ai<=100000),表示英雄卡的编号。

输出
输出仅有一行,共1个整数,表示小李最多可以换到的英雄卡。

样例输入
复制样例数据
6
3 1 2 4 4 5
样例输出
1

提示
1 2 3三张编号连续,可以换一张,换完后剩下4 4 5,不符合兑换规则,无法继续兑换。

#include <bits/stdc++.h>
using namespace std;
int minz(int a,int b,int c)
{
    return min(min(a,b),c);
}
int main()
{
    int a[100005]={0},n,x,ans=0;
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        scanf("%d",&x);
        a[x]++;
    }for(int i=1;i<=100000;i++){
        if(a[i]>=1&&a[i+1]>=1&&a[i+2]>=1){
            x=minz(a[i],a[i+1],a[i+2]);
            ans+=x;
            a[i]-=x;a[i+1]-=x;a[i+2]-=x;
        }
    }printf("%d\n",ans);
    return 0;
}

思路很简单,就是号数存为下标,遇到连续的就减最小的数目。

posted on 2018-12-09 17:13  湫叶  阅读(177)  评论(0编辑  收藏  举报

导航