题解 CF680A 【Bear and Five Cards】

来个map解法

对于这个题目,我的思路是这样的,既然是拿走2或3个一样的,我们把一样的挑出来,每个算出拿走的价值,最后用总数 - 最大价值,类似贪心思路

我采用的是unordered_map,速度会比map快

#include <iostream>
#include <unordered_map>
using namespace std;

unordered_map<int, int> mp; //定义map

inline int sum(unordered_map<int, int>& x)
{
    int ans = 0;
    unordered_map<int, int>::iterator first = x.begin();
    unordered_map<int, int>::iterator last = x.end();
    for(register unordered_map<int, int>::iterator it = first; it != last; ++it)
    {
        ans += (it -> second) * (it -> first);
    }
    return ans;
}

inline int max(const int& x, const int& y)
{
    return (x > y ? x : y);
}

int main()
{
    int x;
    for(register int i = 1; i <= 5; i++)
    {
        cin >> x;
        mp[x]++;
    }
    int all = sum(mp);
    if(mp.size() == 5)
    {
        cout << all << endl;
        return 0;
    }
    int sum = 0, a, b;
    a = b = 0;
    unordered_map<int, int>::iterator first = mp.begin();
    unordered_map<int, int>::iterator last = mp.end();
    for(register unordered_map<int, int>::iterator it = first; it != last; ++it)
    {
        if(it -> second > 1)
        {
            a = (it -> second >= 3 ? 3 * it -> first : 2 * it -> first);
        }
        b = max(a, b);
    }
    cout << all - b << endl;
    return 0;
}
posted @ 2020-11-24 20:22  HappyBobb  阅读(6)  评论(0)    收藏  举报  来源