码迷,mamicode.com
首页 > 其他好文 > 详细

[Arc068D/At2299] Card Eater - 结论

时间:2020-02-06 12:28:09      阅读:58      评论:0      收藏:0      [点我收藏+]

标签:scan   line   一个   ++   using   code   clu   必须   中间   

[Arc068D/At2299]
有一堆牌,每张牌上有一个数字。 每次可以取出其中 \(3\) 张,丢掉数字最大的和数字最小的牌,把中间那张再放回牌堆。 要求最后所有剩余牌上的数字互不相同,求最多能剩几张牌。

设重复数为“多余”的牌的数量

如果重复数是偶数,容易猜得一定存在方案使得可以恰好去掉所有重复的牌

如果重复数是奇数,我们要想去掉重复,就必须要多去掉一张牌

我居然手滑血了一发

#include <bits/stdc++.h>
using namespace std;

int a[1000005],n,t;

int main() {
    scanf("%d",&n);
    for(int i=1;i<=n;i++) scanf("%d",&t), a[t]++;
    int cnt = 0;
    for(int i=1;i<=100000;i++) if(a[i]>1) cnt+=a[i]-1;
    if(cnt&1) n-=cnt+1;
    else n-=cnt;
    cout<<n<<endl;
}

[Arc068D/At2299] Card Eater - 结论

标签:scan   line   一个   ++   using   code   clu   必须   中间   

原文地址:https://www.cnblogs.com/mollnn/p/12268063.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!