首页 > 其他分享 >[CF335F] Buy One,Get One Free

[CF335F] Buy One,Get One Free

时间:2023-10-27 13:35:23浏览次数:40  
标签:Buy cout 第三层 int CF335F Free 反悔 vec ans

气死我了,我决定水了这篇题解。

反悔贪心,考虑决策及反悔,记到第三层反悔就行。

然后你发现要一次只考虑一个不行,要两个两个考虑,然后就做完了,如果深入往下分析能分析出更多可以简化做法的结论。

甚至可以简化到只用一层反悔,具体就是第一层可以简化到只记数量,第三层分析出可以归成第二层的形式。

#include <bits/stdc++.h>
using namespace std;
const int maxn=5e5+10;
typedef long long ll;
const int inf=2e9;
int n,a[maxn];
ll ans;
priority_queue< int,vector<int>,greater<int> > q;
int main()
{
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>a[i],ans+=a[i];
    sort(a+1,a+1+n);
    reverse(a+1,a+1+n);
    for(int i=1,j;i<=n;i=j+1)
    {
        j=i;
        while(j<n&&a[j+1]==a[i])j++;
        int q1s=i-1-2*q.size(),num=j-i+1;//本质是第一层决策
        vector<int> vec;
        for(int j=1;j<=min(num,q1s);j++)vec.push_back(a[i]);
        num-=min(num,q1s);
        for(int j=1;j<=num&&q.size();j++)
        {
            int x=q.top();
            q.pop();
            if(x<a[i])
            {
                vec.push_back(a[i]);
                if(j<num)vec.push_back(a[i]),j++;
            }
            else
            {
                vec.push_back(x);
                if(j<num&&2*a[i]-x>0)vec.push_back(2*a[i]-x),j++;//本质是第三层反悔。
            }
        }
        for(int v:vec)q.push(v);
    }
    while(q.size())ans-=q.top(),q.pop();
    cout<<ans<<'\n';
}

标签:Buy,cout,第三层,int,CF335F,Free,反悔,vec,ans
From: https://www.cnblogs.com/hikkio/p/17792142.html

相关文章

  • 2023 年 CCPC 网络预选赛 L.Partially Free Meal (主席树)
    传送门先插个图玩云顶之弈。#include<iostream>#include<cstring>#include<algorithm>#include<vector>#definelllonglong#definefsfirst#definesesecondconstlongdoubleeps=1e-9;constintN=2e5+10,M=2e5+10;constintM......
  • house of orange(无free的一种利用方法)
    houseoforange(没有free情况下获得一个unsortedbin)之前就已经了解了houseoforange但是没有写博客记录,这几天正好把buu上前几页当时没写的写了一下,其中就有著名的houseoforange实现效果:houseoforange可以实现程序无free的情况下,放入一个unsortedbin条件:能控制topchun......
  • 学习笔记431—freesurfer下载安装,常用术语和recon-all命令
    freesurfer下载安装,常用术语和recon-all命令1基础知识1.1简介freesurfer是一个分析和可视化大脑结构成像和功能成像的工具包,可以处理MRI、fMRI数据,进行大脑解剖学数据测量等。1.2安装freesurfer目前该软件包仅支持Linux和MacOS系统,且官方推荐下载最新版本。官网下载指南......
  • FreeRTOS深入教程(任务的引入及栈的作用)
    (文章目录)前言本篇文章开始带大家深入学习FreeRTOS,带大家学习什么是任务,并且深入学习栈的作用。一、任务的引入在FreeRTOS中,任务(Task)是一个基本的执行单元,它代表了一个并行执行的工作单元。FreeRTOS是一个实时操作系统,允许你创建多个任务,每个任务都有自己的代码、堆栈和优......
  • 嵌入式刷题(day2 new delete 和malloc free的区别)
    (文章目录)前言本篇文章我们来讲解一下newdelete和mallocfree的区别,这个区别在许多面试题中也会经常问到,那么我们就具体的来看看他们有什么不同吧。一、区别new和delete是C++中的运算符,用于动态分配和释放内存空间,而malloc和free是C语言中的函数,用于同样的目的......
  • ABB AC900F学习笔记327:WINCC7.5SP2作为OPC SERVER,freelance2019SP2作为OPCC LIENT练习
    这一篇博客我在新浪博客记录过,地址是 ABBAC900F学习笔记327:WINCC7.5SP2作为OPCSERVER,freelance2019SP2作为OPCCLIENT练习_来自金沙江的小鱼_新浪博客(sina.com.cn)为了避免丢失,我在这里再次记录一遍今天做一个练习,WINCC7.5SP2作为OPCSERVER,freelance2019SP2作为OPCCLIENT。......
  • ABBAC900F学习笔记326:freelance2019SP1作为OPC DA SERVER,WINCC7.5SP2作为OPC DA CLIEN
    昨天练习了ABB的OPCDA通过寻,在同一台计算机上实验的。今天测试局域网上freelance2019SP1作为OPCDASERVER,WINCC7.5SP2作为OPCDACLIENT通讯。测试在昨天的ABB练习程序基础上进行。1.freelance2019SP1作为OPCDASERVER,配置DCOM,参考前面WINCC作为DASERVER的配置方法WINDO......
  • ABBAC900F学习笔记325:FREELANCE2019SP1的OPC练习1
    这一篇博客我爱新浪博客发表过,地址是ABBAC900F学习笔记325:FREELANCE2019SP1的OPC练习1_来自金沙江的小鱼_新浪博客(sina.com.cn)我在这里也记录一遍今天在家做一下freelance2019SP1的OPC通讯练习。新建一个freelance项目,插入硬件和软件、OPC网关、OS等,按照以前的练习配置资源......
  • FreeRTOS入门教程(事件组概念和函数使用)
    (文章目录)前言本篇文章将带大家学习什么是事件组以及如何使用事件组。一、事件组概念事件组通常是由一组位(bits)组成的数据结构,其中每一位都对应着某个特定的事件。每个位可以被设置或清除,表示相应的事件发生或未发生。这种位的组合形成了一个类似于二进制数的集合,每个位都代......
  • FreeRTOS 原理 --- 临界区(critical section)
    关调度器voidvTaskSuspendAll(void){/*AcriticalsectionisnotrequiredasthevariableisoftypeBaseType_t.PleasereadRichardBarry'sreplyinthefollowinglinktoapostintheFreeRTOSsupportforumbeforereportingthisasa......