zoukankan      html  css  js  c++  java
  • 2612. [FHZOI 2017]被窃的项链

    2612. [FHZOI 2017]被窃的项链

    ★★★   输入文件:stolen_necklace.in   输出文件:stolen_necklace.out   简单对比
    时间限制:1 s   内存限制:256 MB

    【题目描述】

    Alice和Bob偷(划掉)通过某些奇技淫巧弄来了一串上面有N(N<=100000)颗宝石的项链(注意是不是),其中包含若干种不同的宝石。每颗宝石拥有自己的类型编号Ki(Ki<=30000)。Alice和Bob需要平分这条项链,这意味着他们需要将每种类型宝石都平分(比如有4颗类型编号为1的宝石和2颗类型编号为2的宝石,你需要给你和你的朋友各2颗1型宝石和1颗2型宝石)。显然他们可以通过将所有宝石一颗一颗裁下来并平分,不过Bob觉得这件事很无聊,他希望能通过最小的裁剪次数来实现平分。Alice和Bob都不善于数学,所以Bob想问你最小的切割次数是多少。

    HOWEVER

    由于Alice的脑冻过大,所以她将问题改为:如果随机打乱这条项链保证能够平分这条项链的最小切割次数是多少?

    【输入格式】

    第一行为一个整数N,代表项链上的宝石数量。

    接下来的一行有N个数,其中的第i个数代表第i颗宝石的类型Ki

    数据保证每种类型的宝石都有偶数个。

    【输出格式】

    保证能够平分项链所需的最小切割次数。

    【样例输入】

    10

    1 2 2 5 1 3 1 5 1 3

    【样例输出】

    4

    【提示】

    针对未随机打乱的样例的一种划分方式(仅供示意划分方式):

    【来源】

    Albert S. Chang

    False HZOI 2017

    so 神奇:

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cmath>
    #include<queue>
     
    using namespace std;
    const int N=100010;
     
    bool vis[N];
    int ans=0;
     
    int main()
    {
        freopen("stolen_necklace.in","r",stdin);
        freopen("stolen_necklace.out","w",stdout);
        int n;
        cin>>n;
        for(int i=1;i<=n;i++)
        {
            int zhu;
            cin>>zhu;
            if(!vis[zhu])
            {
                ans++;
                vis[zhu]=1;
            }
        }
        cout<<ans;
        return 0;
    }
  • 相关阅读:
    对象属性编辑器中实现像Size,Rectangle等可以展开的属性
    远程办公产品风口会不会把SOHO自由职业吹起来
    项目加
    推荐几款免费又好用的项目管理工具
    Sprint Retrospective
    敏捷管理的大概背景和Scrum的特性
    推荐几款最好用的项目管理系统,即好用又免费
    项目管理的需求变更问题
    敏捷管理有一个原则就是:拥抱变化
    推荐5款体验最好的项目管理工具
  • 原文地址:https://www.cnblogs.com/lyqlyq/p/7094678.html
Copyright © 2011-2022 走看看