江西理工大学南昌校区排名赛 A: 单身狗的卡片游戏

题目描述

萌樱花是一只单身狗。

萌樱花今天在桌子上摆出了N张卡片,每张卡片i写着一个数字Ai

他不喜欢卡片上的数字多个出现,于是他想搞点事情拆分它们。

从桌子上选出三张卡,去掉一张数字最大,一张数字最小,然后留下中间那张放回桌子上,

这样的操作持续到桌子上的卡片显示的数字都是唯一的才停止。

那么最后桌子上最多可以留下多少张卡片呢?

输入

3<=N<=105

N是奇数,这样保证绝对可以留下一张

1<=Ai<=105

Ai是整数

输入格式:

N

A1 A2 A3 .....AN

输出

输出 最后桌子上能留下多少张卡

样例输入

5
1 2 1 3 7

样例输出

3

提示

 我们选取1 1 2,去掉最大2,最小1,留下中间的1,最后桌子上只剩下1 3 7,一共三张卡

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    int a[200000];
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
    }
    sort(a,a+n);
    int x=unique(a,a+n)-a;
    if(x%2)
    {
        cout<<x;
    }
    else
    {
        cout<<x-1;
    }
    return 0;
}
#include<stdio.h>  
#include<string.h>  
#include<queue>  
#include<algorithm>  
using namespace std;  
int a[100006];  
int vis[100006];  
int main()  
{  
    int n;  
    while(~scanf("%d",&n))  
    {  
        memset(vis,0,sizeof(vis));  
        for(int i=0;i<n;i++)  
        {  
            scanf("%d",&a[i]);  
            vis[a[i]]++;  
        }  
        int j=100002;  
        for(int i=1;i<=100002;i++)  
        {  
            if(vis[i]>1)  
            {  
                while(vis[j]<=1&&j>i)j--;  
                if(j>i)  
                {  
                    if(vis[i]==vis[j])vis[i]=1,vis[j]=1;  
                    else if(vis[i]>vis[j])  
                    {  
                        vis[i]-=vis[j]-1;  
                        vis[j]=1;  
                        i--;  
                    }  
                    else if(vis[i]<vis[j])  
                    {  
                        vis[j]-=vis[i]-1;  
                        vis[i]=1;  
                        j++;  
                    }  
                }  
            }  
        }  
        int output=0;  
        for(int i=1;i<=100002;i++)  
        {  
            if(vis[i]==1)output++;  
            if(vis[i]>1)  
            {  
                if(vis[i]%2==0)continue;  
                else output++;  
            }  
        }  
        printf("%d
",output);  
    }  
}  
原文地址:https://www.cnblogs.com/yinghualuowu/p/9494669.html