【买二赠一——二分、贪心(有误)】

题目

二分

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 5e5 + 10;
bool vis[N];
int a[N];
int two, pos = 1, n;
ll sum;
int main()
{
    cin >> n;
    for (int i = 1; i <= n; i++)
        cin >> a[i];

    sort(a + 1, a + n + 1, greater<int>());
    while (pos <= n)
    {
        if (vis[pos] == 1)
        {
            pos++;
            continue;
        }

        vis[pos] = 1;
        two++;
        sum += a[pos];

        if (two >= 2)
        {
            int l = pos + 1;
            int r = n;
            while (l < r)
            {
                int mid = l + r >> 1;
                if (a[mid] <= a[pos] / 2)
                    r = mid;
                else
                    l = mid + 1;
            }

            if (a[l] <= a[pos] / 2)
            {
                while (vis[l])
                    l++;
                vis[l] = 1;
            }

            two = 0;
        }

        pos++;
    }

    cout << sum;
}

妙用STL

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
vector<int> v;
long long sum;
int main()
{
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++)
    {
        int x;
        cin >> x;
        v.push_back(x);
    }

    sort(v.begin(), v.end());
    while (v.size())
    {
        auto it = prev(v.end());
        int v1 = *it;
        sum += v1;
        if (it == v.begin())
            break;
        int v2 = *prev(it);
        sum += v2;
        v.erase(prev(v.end()));
        v.erase(prev(v.end()));
        auto lower = upper_bound(v.begin(), v.end(), v2 / 2);
        if (lower == v.begin())
            continue;
        v.erase(prev(lower));
    }

    cout << sum;
}
相关推荐
D e re k ZH8 小时前
P5025 [SNOI2017] 炸弹
c++·算法
A boy CDEF girl8 小时前
算法题专栏:优选算法
数据结构·算法·leetcode
没落之王8 小时前
三易五行看宋朝的三界确立
大数据·人工智能·算法
坤坤子吖9 小时前
算法学习——单调队列
开发语言·c++·笔记·学习·算法
Js.Tx10 小时前
【具体数学 Concrete Mathematics】2.1.5 一般性的方法
算法·具体数学
秋天的怀念_David12 小时前
算法一千零一夜 · 作品相关:版权与致谢声明
程序人生·算法·学习方法
揽星河..12 小时前
【C语言】数组
c语言·开发语言·算法
careathers12 小时前
【数据结构】基于比较的排序算法 - 选择排序
数据结构·算法·排序算法
听风若依12 小时前
C++模板初阶
c++·算法
纪念 22913 小时前
C++ 算法(模拟)
开发语言·c++·算法