[NOIP2016 提高组] 蚯蚓

news2024/9/28 15:21:16

题目链接

  题目很长,题意如下:一开始有n个值,,有m次操作,每次操作选择一个最大的值x,将它分解成两个数,分别为\left \lfloor u \times x / v \right \rfloor,以及x - \left \lfloor u \times x / v \right \rfloor,然后,经过这个操作之后,对除了这两个数以外的其他数字进行 +q 操作。最后两行输出,第一行输出,是每次操作执行之前,我们找到的那个最大的值是多少;第二行输出,是我们执行完m次操作,现在这n+m个值都各自变成了几?

  由于输入的量加上操作的量很大,所以我们不能使用带有O(log_2)复杂度的大根堆来解决这个问题,这无疑是加大了我们这道问题的难度!

  那么,这暗示着我们需要寻找其中的“线性关系”了。

  我们会发现,我们取出来的值一定是排除“增量q”情况下的递减的。但,我们再想一下,同样经过T次“增量q”,如果先分解的两个,是不是后期分得的“增量q”会更多呢(因为分解成了两个,相当于每个都享受到了这样的优惠,但是没分解的,现在是两个共享同一个“增量q”),先分解的在随着时间的推移反而会越来越有优势。

  所以,我们不妨维护三个队列:

队列1:原本的值,按照从大到小排序;

队列2:分解之后,值偏大的那个,那么值越大的一定就先分解了,享受“增量q”福利肯定也更早;

队列3:分解之后,值偏小的那个,作用同上。

  那么,又如何维护“增量q”呢,实际上,我们只需要再多统计一个信息就可以了,就是这个值是第几轮生成的,用当前轮次减去生成的轮次,不就得到了它需要被增加多少次了呢。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e5 + 7;
int n, m, q, t;
ll u, v;
ll a[maxn];
struct node {
    ll val, id;
    node(ll a = 0, ll b = 0):val(a), id(b) {}
    friend bool operator < (node e1, node e2) {
        return e1.val - e1.id * q < e2.val - e2.id * q;
    }
    ll F(ll i) { return val + (i - id) * q; }
};
struct Heap {
    queue<node> Q[3];
    void clear() {
        for(int i = 0; i < 3; i ++) while(!Q[i].empty()) Q[i].pop();
    }
    bool empty() { return Q[0].empty() && Q[1].empty() && Q[2].empty(); }
    node Top() {
        node ans;
        int qid = -1;
        for(int i = 0; i < 3; i ++) {
            if(Q[i].empty()) continue;
            if(~qid) {
                if(Q[qid].front() < Q[i].front()) qid = i;
            }
            else qid = i;
        }
        ans = Q[qid].front();
        Q[qid].pop();
        return ans;
    }
} que;
int main() {
    scanf("%d%d%d%lld%lld%d", &n, &m, &q, &u, &v, &t);
    for(int i = 1; i <= n; i ++) scanf("%lld", &a[i]);
    sort(a + 1, a + n + 1, greater<ll>() );
    que.clear();
    for(int i = 1; i <= n; i ++) que.Q[0].push(node(a[i], 0));
    int tot = m / t;
    if(!tot) printf("\n");
    for(int i = 0; i < m; i ++) {
        node now = que.Top();
        if((i + 1) % t == 0) {
            tot --;
            printf("%lld%c", now.F(i), tot ? ' ' : '\n');
        }
        ll x = now.F(i) * u / v, y = now.F(i) - x;
        if(x < y) swap(x, y);
        que.Q[1].push(node(x, i + 1));
        que.Q[2].push(node(y, i + 1));
    }
    tot = (n + m) / t;
    if(!tot) printf("\n");
    for(int i = 1; i <= n + m; i ++) {
        node now = que.Top();
        if(i % t == 0) {
            tot --;
            printf("%lld%c", now.F(m), tot ? ' ' : '\n');
        }
    }
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1025983.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

什么是 AirServer?Mac专用投屏工具AirServer 7 .27 for Mac中文破解版百度网盘下载

AirServer 7 .27 for Mac中文免费激活版是一款Mac专用投屏工具&#xff0c;能够通过本地网络将音频、照片、视频以及支持AirPlay功能的第三方App&#xff0c;从 iOS 设备无线传送到 Mac 电脑的屏幕上&#xff0c;把Mac变成一个AirPlay终端的实用工具。 目前最新的AirServer 7.2…

Python常用库(六):科学计算库-Numpy[上篇]:创建、访问、赋值

1.Numpy 1.1 介绍 NumPy是Python中非常流行且重要的科学计算库&#xff0c;提供了一个强大的多维数组对象(ndarray)和许多数学操作&#xff0c;包括矩阵运算、线性代数、微积分等等。 numpy是Python中一个非常有用的工具&#xff0c;特别是在需要进行数值计算、线性代数计算、…

基于nRF7002-DK的NFC功能切换系统(nRF Connect SDK+NFC)

目录 项目介绍硬件介绍项目设计开发环境及工程目录总体流程图硬件初始化NFC功能实现文本记录安卓应用打开按键切换功能 功能展示项目总结 &#x1f449; 【Funpack2-6】基于nRF7002-DK的NFC功能切换系统 &#x1f449; Github: EmbeddedCamerata/nRF7002-DK-nfc-function-switc…

智慧养殖:浅谈视频监控与AI智能识别技术助力奶牛高效、智慧养殖

一、方案背景 随着科技的飞速发展&#xff0c;智能化养殖逐渐成为现代畜牧业的发展趋势。人工智能技术、物联网、视频技术、云计算、大数据等新兴技术&#xff0c;正在为奶牛养殖业带来全新的变革。越来越多的牧场、养殖场开始运用新技术来进行智能监管、提高生产效率、降低生…

就只说 3 个 Java 面试题

在面试时&#xff0c;即使是经验丰富的开发人员&#xff0c;也可能会发现这是一些很棘手的问题&#xff1a; 1、Java中“transient”关键字的用途是什么&#xff1f;如何才能实现这一目标&#xff1f; 在 Java 中&#xff0c;“transient”关键字用于指示类的特定字段不应包含…

蒙特卡洛方法的数学基础-1

蒙特卡洛方法的数学基础-1 概率论 Bayes 公式 常用分布 Binominal Distribution Poisson Distribution Gaussian Distribution Exponential Distribution Uniform Distribution 大数定理 均匀概率分布随机地取N个数xi &#xff0c;函数值之和的算术平均收敛于函数的期望值 …

Cesium 空间量算——生成点位坐标

文章目录 需求分析1. 点击坐标点实现2. 输入坐标实现 需求 用 Cesium 生成点位坐标&#xff0c;并明显标识 分析 以下是我的两种实现方式 第一种是坐标点击实现 第二种是输入坐标实现 1. 点击坐标点实现 //点位坐标getLocation() {this.hoverIndex 0;let that this;this.view…

八一书《乡村振兴战略下传统村落文化旅游设计》许少辉瑞博士生辉少许——2023学生开学季许多少年辉光三农

八一书《乡村振兴战略下传统村落文化旅游设计》许少辉瑞博士生辉少许——2023学生开学季许多少年辉光三农

10万单词例句表单词句子ACCESS\EXCEL数据库

原本我以为《3万5千英语句子英语例句大全ACCESS数据库》例句已经够多了&#xff0c;没想到今天遇到一个10万条英语单词例句的数据&#xff0c;非常适合与单词词典进行关联学习&#xff0c;例句多了单词的用法以及句子的掌握都更有效率。 截图下方有显示“共有记录数”&#xff…

Cesium 空间量算——面积量算

面积量算 需求分析 需求 对页面上所选内容进行面积计算 分析 其实&#xff0c;计算面积其实就是把一个面&#xff0c;拆分成一个一个的三角曲面计算然后相加得到&#xff0c;下面是计算的面积的代码 /** * description : 面积量算* author : Hukang* date : 2023-09-20 13:1…

Date类的学习笔记-超级详细

Date 的定义, 在开始研究这个之前我们首先要能够明白一点&#xff0c;这个 Date 其实本质上是一个对象&#xff0c;我们通过这个对象可以去构建变量&#xff0c;知道这个之后就可以开展后续的研究了 JDK 通用 Date 类的构造方法 测试 获取当前的时间 // 构造这个日期对象Date…

计算机毕设 opencv python 深度学习垃圾图像分类系统

文章目录 0 前言课题简介一、识别效果二、实现1.数据集2.实现原理和方法3.网络结构 最后 0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往往达不到毕业答辩的要求&#xff0c;这两年不断有学弟…

Vue系列(三)之 基础语法【下篇】

一. 事件处理 在 Vue.js 中&#xff0c;v-on 指令被用于监听 DOM 事件&#xff0c;并在事件触发时执行相应的方法&#xff0c;这些方法就是事件处理器。v-on 指令有简写形式 &#xff0c;例如 click"handleClick" 会监听点击事件并执行 handleClick 方法。 事件处理…

MQ - 09 RabbitMQ的架构设计与实现

文章目录 导图概述RabbitMQ 系统架构协议和网络模块数据存储元数据存储 ---> 自带的分布式数据库 Mnesia消息数据存储 生产者和消费者HTTP 协议支持和管控操作RabbitMQ 从生产到消费的全过程总结 导图 概述 最基础的消息队列应该具备通信协议、网络模块、存储模块、生产者、…

socket() failed (24: Too many open files) while connecting to upstream, client

一、这个错误通常是因为文件句柄数目超过系统限制导致的。要解决这个问题&#xff0c;您可以尝试以下几个步骤&#xff1a; 调整系统文件句柄限制&#xff1a;您可以通过修改/etc/security/limits.conf文件中的nofile参数来增加系统文件句柄的最大数目。将nofile的值增加到更高…

zabbix监控平台部署(二)

目录 一、自定义监控 二、Nginx监控 三、监控mysql 四、钉钉告警 五、163邮箱报警 总结 zabbix5.0 一、自定义监控 zabbix-agent&#xff08;147&#xff09; agent端操作 vim /etc/zabbix/zabbix_agentd.conf 在配置未文件末尾添加 UserParametermemory_userd,free…

C++中 负数与String字符串的长度 string.size()作比较 输出错误

在刷题的时候&#xff0c;发现用 -1<t.size() 输出的是错误的值&#xff0c;如下&#xff0c;t“ABC”&#xff0c;但重新定义一个变量后又可以了&#xff0c;查阅检查后&#xff0c;发现string.size()返回的是一个无符号的整数&#xff0c;因此与有符号整数比较&#xff0c…

SpingBoot:整合Mybatis-plus+Druid+mysql

SpingBoot&#xff1a;整合Mybatis-plusDruid 一、特别说明二、创建springboot新工程三、配置3.1 配置pom.xml文件3.2 配置数据源和durid连接池3.3 编写拦截器配置类 四、自动生成代码五、测试六、附件-mysql数据库表 本文参考链接&#xff1a; [Java] Spring Boot 集成 MyBati…

免费、安全、可靠!一站式构建平台 ABS 介绍及实例演示 | 龙蜥技术

编者按&#xff1a;操作系统是一个大的软件集合&#xff0c;成百上千个软件之间有相互调用、相互依赖等各种复杂的关联关系&#xff0c;所以统一的软件包格式&#xff0c;能够更友好地管理、定义这些复杂关系。今天&#xff0c;龙蜥社区基础设施 Contributor 单凯伦带大家了解龙…

Python灰帽编程——网页信息爬取

文章目录 网页信息爬取1. 相关模块1.1 requests 模块1.1.1 模块中的请求方法1.1.2 请求方法中的参数1.1.3 响应对象中属性 1.2 RE 模块1.2.1 匹配单个字符1.2.2 匹配一组字符1.2.3 其他元字符1.2.4 核心函数 2. 网页信息爬取2.1 获取网页HTML 源代码2.2 提取图片地址2.3 下载图…