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

题目

二分

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;
}
相关推荐
2401_8582861135 分钟前
124.【C语言】数据结构之快速排序的小区间优化和非递归的解决方法
c语言·开发语言·数据结构·算法·排序算法·
Navigator_Z1 小时前
LeetCode //C - 541. Reverse String II
c语言·算法·leetcode
划步为心2 小时前
代码随想录day03
算法
地瓜机器人2 小时前
开放词汇检测新晋SOTA:地瓜机器人开源DOSOD实时检测算法
人工智能·科技·算法·机器人·rdk
带多刺的玫瑰2 小时前
Leecode刷题C语言之统计重新排列后包含另一个字符串的子字符串数目②
java·数据结构·算法
sysu632 小时前
74.搜索二维矩阵 python
开发语言·数据结构·python·线性代数·算法·leetcode·矩阵
佳小蛙3 小时前
Java参数值传递
java·算法·排序算法
一只鸡某3 小时前
算法--最大公约数,最小公倍数
开发语言·c++·算法
像污秽一样3 小时前
AI刷题-异或编码、拼凑单词 chi
c++·算法
swimxu4 小时前
[ LeetCode 75 ] 283 移动零(JavaScript)
javascript·算法·leetcode