zoukankan      html  css  js  c++  java
  • 强迫症

    强迫症

    题意:链接:https://ac.nowcoder.com/acm/problem/16301
    来源:牛客网

    铁子最近犯上了强迫症,他总是想要把一个序列里的元素变得两两不同,而他每次可以执行一个这样的操作,他可以选择序列里的任意两个元素相加,不妨记作ai和aj,然后把ai+aj放进序列里,再删掉ai和aj其中的随便一个,问最少操作多少次可以完成铁子的愿望?

    示例1:

    输入:

    3

    1 2 2

    输出:

    1

    说明:

    将序列的第1个整数和序列的第2个整数相加,再删掉第2个整数。

    思路:每次可以选择两个元素相加放进数组并且删除其中一个,发现每次操作只能清除两个重复元素

    找规律:1 2 2 2 有三个2,需要进行2次;

        1 2 2 3 3  需要进行2次;

        1 2 2 3 3 4 4 需要 3次;

        规律就是 所有重复元素的和-重复元素的个数;

    AC代码:

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    
    int main()
    {
        ll n;
        cin>>n;
        map<ll,ll> mp;
        for(int i=0;i<n;i++)
        {
            ll t;
            cin>>t;
            mp[t]++;
        }
        ll ans = 0;
        int k=0;
        for(auto it = mp.begin();it!=mp.end();it++)
        {
            if(it->second>1)
            {
                ans+=it->second;
                k++;
            }
        }
        cout<<ans-k<<endl;
        return 0;
    }
  • 相关阅读:
    R
    P
    O
    M
    二分算法的一些思考
    I
    H
    G
    5-46 新浪微博热门话题 (30分)——unfinished HASH
    BZOJ 1179: [Apio2009]Atm
  • 原文地址:https://www.cnblogs.com/subject/p/12423484.html
Copyright © 2011-2022 走看看