AtCoder Beginner Contest 313 C 一个序列同时加一个数和减一个数,直到最大和最小之间相差最大为1(结论可记住)

AtCoder Beginner Contest 313 C 

做题链接:AtCoder Beginner Contest 313

问题陈述

给你一个整数序列 A=(A1​,A2​,…,AN​)。你可以执行以下操作任意次数(可能为零)。

  • 选择带有 1≤i,j≤N的整数 i和 j。将Ai​减少 1,将Aj​增加 1。

求使A的最小值与最大值之差最多为 1 所需的最小运算次数。

#### 输入

输入内容由标准输入法提供,格式如下
N
A_1 A_2 ... A_N

#### 输出

将答案打印为整数。

 

思想:1.给定一个固定的B,求使A等于B所需的最小运算次数

           2.在所有最大值和最小值最多相差1的B中,找出一个所需的运算次数最少的,即1

做法:

1.设S是所有k(1<=k<=n)中|ak-bk|的和,在一次操作中, 减少ai会使s改变1,增加aj也会改变1,因此,一次操作最多会使s减少两个,现在,我们的目标是使A等于B,即s=0,因此显然至少需要s/2次操作,并且我们总是可以通过s/2次运算使A=B(证明,如果增加一个数而没有对应的数来减,那就说明A的元素的和>B的元素的和,假设不成立)。因此,这个问题的答案是

2.在所有最大值和最小值最多相差1的B中,找出一个所需运算次数最少的

步骤如下:

首先为了使B的元素之和=A的元素之和,且B的最大值和最小值最多相差1

那么B必须由p的(n-r)份和 (p+1)的r份组成,其中p和r分别是A的元素之和和除以n时的商和余数

题目问题可以简化为:在由p的(n-r)份和(p+)的r份组成的B中,找出一个所有|ak-bk|最小的

直觉上,当i=1,2...n按照Ai的升序排序时,让Bi=p代表i的前(n-r)个实例,让Bi=p+1代表i的后r个实例似乎是最优的。(证明:如果有Ai<Aj&&Bi>Bj),那么交换Bi和Bj不会增加|Ai-Bi|+|Aj-Bj|,这可以简单的按照Ai,Aj,Bi,Bj,的排序来划分情况

另外:时间复杂度为O(nlogn),我们可以选择std::nth_element 在O(n)的时间内解决。

代码: 

// Problem: C - Approximate Equalization 2
// Contest: AtCoder - AtCoder Beginner Contest 313
// URL: https://atcoder.jp/contests/abc313/tasks/abc313_c
// Memory Limit: 1024 MB
// Time Limit: 2000 ms
// 
// Powered by CP Editor (https://cpeditor.org)#include<bits/stdc++.h>
using namespace std;typedef long long ll;const int N = 2e5+5;int n;
int a[N];int main(){cin>>n;vector<int> a(n);ll sum=0;for(int i=0;i<n;i++){cin>>a[i];sum+=a[i];}sort(a.begin(),a.end());vector<int> b(n,sum/n);  //空间为n,初始值为sum/nfor(int i=0;i<sum%n;i++){b[n-1-i]++;}	ll ans=0;for(int i=0;i<n;i++){ans+=abs(a[i]-b[i]);}cout<<ans/2<<"\n";return 0;	}

 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图扑可视化图表组件之股票数据分析应用

股市是市场经济的必然产物&#xff0c;在一个国家的金融领域之中有着举足轻重的地位。在过去&#xff0c;人们对于市场走势的把握主要依赖于经验和直觉&#xff0c;往往容易受到主观因素的影响&#xff0c;导致决策上出现偏差。如今&#xff0c;通过数据可视化呈现&#xff0c;…

【C++】多态

目录 1. 多态的概念1.1 概念 2. 多态的定义及实现2.1 多态的构成条件2.2 虚函数2.3 虚函数的重写2.3.1 重写的一些特殊情况 2.4 final和override2.5 重载、覆盖(重写)、隐藏(重定义)的对比 3. 抽象类3.1 概念3.2 实现继承与接口继承 4. 多态的原理4.1 虚函数表4.2 多态的原理4.…

入门人工智能 ——自然语言处理介绍,并使用 Python 进行文本情感分析(5)

入门人工智能 ——自然语言处理介绍&#xff0c;并使用 Python 进行文本情感分析&#xff08;5&#xff09;&#xff09; 入门人工智能 ——自然语言处理介绍&#xff0c;并使用 Python 进行文本情感分析介绍自然语言处理的挑战NLP的基本任务NLP的基本技术NLP的应用领域 使用 P…

《银河麒麟高级服务器操作系统V10》使用

一言而论&#xff1a;讲了麒麟服务器V10的基本使用&#xff0c;包括终端、VNC 文章目录 前言基本架构环境硬件环境软件环境 麒麟安装步骤1.在宿主机上安装好VM&#xff0c;并且激活2.使用VM创建虚拟机3.启动虚拟机 终端常用点VNC的使用麒麟上安装VNC服务器Windows上安装VNC客户…

自动化测试(五):自动化测试框架的搭建和基于yaml热加载的测试用例的设计

该部分是对自动化测试专栏前四篇的一个补充&#xff0c;本次参考以下文章实现一个完整的谷歌翻译接口自动化测试:   [1]【python小脚本】Yaml配置文件动态加载   [2]【python做接口测试的学习记录day8——pytest自动化测试框架之热加载和断言封装】 目标&#xff1a;框架封…

在visual studio里安装Python并创建python工程

在2009年&#xff0c;云计算开始发力&#xff0c;Python、R、Go这些天然处理批量计算的语言也迅猛发展。微软在2010年&#xff0c;把Python当成一个语言包插件&#xff0c;集成到了visual studio 2010里。在"云优先&#xff0c;移动优先"的战略下&#xff0c;于2015年…

什么是Jmeter?Jmeter使用的原理步骤是什么?

1.1 什么是 JMeter Apache JMeter 是 Apache 组织开发的基于 Java 的压力测试工具。用于对软件做压力测试&#xff0c;它最初被设计用于 Web 应用测试&#xff0c;但后来扩展到其他测试领域。 它可以用于测试静态和动态资源&#xff0c;例如静态文件、Java 小服务程序、CGI 脚…

记录一个iOS使用陀螺仪3d效果的抖动问题

使用陀螺仪的时候&#xff0c;遇到一个问题&#xff0c;就是在拖动scrollView滚动的时候&#xff0c;3d效果的图片会抖动 实现3d效果的代码 - (void)updateWithGravityX:(double)gravityXgravityY:(double)gravityYgravityZ:(double)gravityZ {//因为在斜向上45度角的时候&am…

【win10】怎么删除休眠文件

电脑c盘天天爆红&#xff0c;每天可用空间都变少&#xff0c;或者电脑晚上不关机&#xff0c;只锁屏后息屏&#xff0c;第二天发现电脑关机了&#xff0c;可能就是休眠功能惹得鬼。 以下是关闭休眠功能步骤&#xff1a;   1、这个隐藏的系统文件hiberfil.sys&#xff0c;体积…

浅谈C++|STL之算法函数篇

一.遍历常用算法 1.1for_each 在 C 中&#xff0c;for_each 是一个算法函数&#xff0c;位于 <algorithm> 头文件中。它接受一个范围&#xff08;容器或迭代器对&#xff09;以及一个函数对象&#xff08;函数指针、函数、lambda 表达式等&#xff09;&#xff0c;用于…

LiveNVR监控流媒体Onvif/RTSP功能-支持海康摄像头海康NVR通过EHOME协议ISUP协议接入分发视频流或是转GB28181

LiveNVR支持海康NVR摄像头通EHOME接入ISUP接入LiveNVR分发视频流或是转GB28181 1、海康 ISUP 接入配置2、海康设备接入2.1、海康EHOME接入配置示例2.2、海康ISUP接入配置示例 3、通道配置3.1、直播流接入类型 海康ISUP3.2、海康 ISUP 设备ID3.3、启用保存3.4、接入成功 4、相关…

ARMv8架构简介

ARMv8-A架构和处理器 ARMv8-A架构 ARMv8‑A 架构是针对应用程序配置文件的最新一代 ARM 架构。 ARMv8 这个名称用于描述整体架构,现在包括 32 位执行状态和 64 位执行状态。它引入了使用 64 位宽寄存器执行的能力,同时保持与现有 ARMv7 软件的向后兼容性。 ARMv8‑A 架构引…

如何获取美团的热门商品和服务

导语 美团是中国最大的生活服务平台之一&#xff0c;提供了各种各样的商品和服务&#xff0c;如美食、酒店、旅游、电影、娱乐等。如果你想了解美团的热门商品和服务&#xff0c;你可以使用爬虫技术来获取它们。本文将介绍如何使用Python和BeautifulSoup库来编写一个简单的爬虫…

SpringBoot运行原理

目录 SpringBootApplication ComponentScan SpringBootConfiguration EnableAutoConfiguration 结论 SpringbootApplication&#xff08;主入口&#xff09; SpringBootApplication public class SpringbootConfigApplication {public static void main(String[] args) {…

机器学习 day33(误差分析、添加数据)

误差分析 我们可以手动查看分类错误的子集样本&#xff08;通常为100个&#xff09;&#xff0c;并统计他们的错误类型在所有错误类型中&#xff0c;选择一种或几种最常见的错误&#xff0c;进行改进。这可以最高效的改进你的模型误差分析的一个限制是&#xff1a;它只能很好…

CRC(循环冗余校验码的校验方法)

5个关键点&#xff1a; 1.信息码&#xff1a;即给出要校验的二进制码 2.生成多项式&#xff1a;一般多项式会给&#xff0c;从最高位的指数位数就可以得到有几个校验码&#xff1b;如果没给多项式&#xff0c;肯定会给个多项式二进制码&#xff0c;根据它来推就行&#xff08;…

【深度学习】 Python 和 NumPy 系列教程(十六):Matplotlib详解:2、3d绘图类型(2)3D散点图(3D Scatter Plot)

目录 一、前言 二、实验环境 三、Matplotlib详解 1、2d绘图类型 2、3d绘图类型 0. 设置中文字体 1. 线框图&#xff08;Wireframe Plot&#xff09; 2. 3D散点图&#xff08;3D Scatter Plot&#xff09; 一、前言 Python是一种高级编程语言&#xff0c;由Guido van Ross…

【Java基础】- RMI原理和使用详解

【Java基础】- RMI原理和使用详解 文章目录 【Java基础】- RMI原理和使用详解一、什么RMI二、RMI原理2.1 工作原理图2.2 工作原理 三、RMI远程调用步骤3.1 RMI远程调用运行流程图3.2 RMI 远程调用步骤 四、JAVA RMI简单实现4.1 如何实现一个RMI程序4.2 JAVA实现RMI程序 一、什么…

微信小程序项目开发Day1

没接触过&#xff0c;直接看视频学习&#xff1a; 千锋教育微信小程序开发制作前端教程&#xff0c;零基础轻松入门玩转微信小程序_哔哩哔哩_bilibili千锋教育微信小程序开发制作前端教程&#xff0c;零基础轻松入门玩转微信小程序共计56条视频&#xff0c;包括&#xff1a;学…

数据分享|R语言逻辑回归、Naive Bayes贝叶斯、决策树、随机森林算法预测心脏病...

全文链接&#xff1a;http://tecdat.cn/?p23061 这个数据集&#xff08;查看文末了解数据免费获取方式&#xff09;可以追溯到1988年&#xff0c;由四个数据库组成。克利夫兰、匈牙利、瑞士和长滩。"目标 "字段是指病人是否有心脏病。它的数值为整数&#xff0c;0无…