Minimizing Difference CodeForces - 1244E(贪心题)

题目

  • 题意
  • 官方题解:
  • 百度翻译
  • 思路
  • ac代码

题意

给出一列数,至多n个操作使其中的数+1或-1,要求得到最小的差值(最大值-最小值);

You are given a sequence a1_{1}1,a2_{2}2,…,an_{n}n consisting of nn integers.

You may perform the following operation on this sequence: choose any element and either increase or decrease it by one.

Calculate the minimum possible difference between the maximum element and the minimum element in the sequence, if you can perform the aforementioned operation no more than k times.

Input
The first line contains two integers n and k (2≤n≤105^{5}5,1≤k≤1014^{14}14)— the number of elements in the sequence and the maximum number of times you can perform the operation, respectively.

The second line contains a sequence of integers a1_{1}1,a2_{2}2,…,an_{n}n(1≤ai≤109^{9}9)

Output
Print the minimum possible difference between the maximum element and the minimum element in the sequence, if you can perform the aforementioned operation no more than kk times.

Examples
Input
4 5
3 1 7 5
Output
2
Input
3 10
100 100 100
Output
0
Input
10 9
4 5 5 7 5 4 5 2 4 3
Output
1
Note
In the first example you can increase the first element twice and decrease the third element twice, so the sequence becomes [3,3,5,5] and the difference between maximum and minimum is 2. You still can perform one operation after that, but it’s useless since you can’t make the answer less than 2.

In the second example all elements are already equal, so you may get 0 as the answer even without applying any operations.

官方题解:

在这里插入图片描述

百度翻译

假设得到的数组中的最大值应该是R,最小值应该是L。让我们估计使用这些属性生成数组所需的操作数。所有小于l的元素都应该增加到l,所有大于r的元素都应该减少到r,我们不必对剩余的元素执行任何操作。
为什么呢?假设我们构造了一个 L∉A 和 R∉A的答案。如果我们增加到L的元素的数量不小于我们减少到R的元素的数量,那么我们可以构造最小等于L 1和最大等于R 1的答案,并且不需要更多的操作。如果我们增加到LL的元素的数量小于我们减少到R的元素的数量,那么我们构造L+1的最小值和最大值R+ 1的答案。所以我们可以移动范围[l,r],使它的一个端点属于
现在我们可以解决如下问题:在结果数组中迭代最大值,找到二进制搜索所能得到的最大最小值,然后反求:在得到的数组中对最小值进行迭代,并用二进制搜索求出最大的最大值。为了检查我们需要多少操作,例如,要使所有值都不小于ll,我们可以通过另一个二进制搜索找到需要更改的元素的数量(让这些元素的数量为m),并用前缀sums找到它们的和(让它们的和为s)。然后,所需的操作数正好是lm-s。可以使用相同的方法来查找使所有元素不大于r的操作数。
这是问题本来应该解决的方式,但不幸的是,我们没有找到一个更容易贪婪的解决方案。

思路

就是一道贪心题·,但由于操作次数过大,范围需定义为 long long分情况(到每个数的个数大小)从两边向中间推进,当两边数相等时结束。(感觉题挺简单,但测试的时候,连题都没看完。一是英语垃圾,二还是学的不精

ac代码

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int M=1e5+10;
typedef long long  ll;
ll m,n;
ll dp[M],book[M],s[M];
int main()
{scanf("%lld%lld",&m,&n);for(ll i=1; i<=m; i++){scanf("%d",&dp[i]);book[i]=1;}sort(dp,dp+m+1);ll k=1;s[k]=dp[1];for(ll i=2; i<=m; i++){if(s[k]==dp[i])book[k]++;else{k++;s[k]=dp[i];}}ll a=1,b=k;while(n){if(s[a]==s[b])break;if(book[a]>book[b]){ll bb=book[b]*(s[b]-s[b-1]);if(n<=bb){s[b]=s[b]-(n/book[b]);break;}n-=bb;book[b-1]+=book[b];b--;}else{ll aa=book[a]*(s[a+1]-s[a]);if(n<=aa){s[a]=s[a]+(n/book[a]);break;}n-=aa;book[a+1]+=book[a];a++;}}printf("%lld\n",s[b]-s[a]);return 0;
}

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

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

相关文章

[设计模式]依赖倒转原则

代码如下: #include <iostream> #include <string>using namespace std;//银行工作人员 class BankWorker { public:void saveService(){cout << "办理存款业务" << endl;}void payService(){cout << "办理支付业务" <&…

使用 Docker 搭建 PostgreSQL 12 主从环境

环境准备&#xff1a;一台安装了Docker的Linux服务器。为了简化演示环境&#xff0c;这里只用一台服务器来演示&#xff0c;通过不同端口来区分。01—创建一个docker bridge 网路用于测试docker network create --subnet172.18.0.0/24 dockernetwork docker network ls设置了网…

matlab gui 密码登录 论文,MATLAB GUI 密码输入

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼function varargout zhanghao(varargin)% ZHANGHAO MATLAB code for zhanghao.fig% ZHANGHAO, by itself, creates a new ZHANGHAO or raises the existing% singleton*.%% H ZHANGHAO returns the handle to a new ZHANGHAO or …

Paint the Tree CodeForces - 1244D(看似是树,其实是条链)

目录题目官方题解&#xff1a;百度翻译题解ac代码题目 给多组两顶点连接&#xff0c;得到的图任意三个顶点都是不同的颜色&#xff0c;&#xff0c;给出各顶点染三种颜色的花费&#xff0c;问各店如何染&#xff0c;满足条件情况下&#xff0c;使得花费最少&#xff1b; You …

[设计模式]简单工厂模式

简单工厂模式优点: 1.客户端和具体实现解耦 2.对于某些对象的创建过程比较复杂的情况&#xff0c;我们不用考虑这些。 简单工厂模式缺点: 1.简单工厂模式&#xff0c;增加新的功能是通过修改源代码实现&#xff0c;不符合开闭原则。 2.这个工厂(类)职责过重&#xff0c;这个…

什么前浪后浪,我们只不过是时代大潮中的一朵小浪花

这是头哥侃码的第198篇原创上周的五四青年节&#xff0c;我的朋友圈被一个短视频刷屏了&#xff0c;不知道你的朋友圈有没有被刷到&#xff1f;这个短视频来自小破站B站的一则宣传视频《后浪》。我是B站的老用户&#xff0c;所以在看完视频后&#xff0c;我特地跑到B站看了下&a…

java上GUI表格按钮,java GUI表格实例

1 package javademo;2 import java.awt.*;3 import javax.swing.*;4 import java.awt.event.*;5 public class table3{6 JFrame framenew JFrame("表格实例");7 Object [][]date {{"李明",45,"计算机"},{8 "小王",32,"数学"…

[设计模式]工厂方法模式

工厂方法模式缺点: 1.类的个数成倍增加&#xff0c;导致类越来越多&#xff0c;增加维护成本。 2.增加了系统的抽象性和理解难度。 (判断生产什么&#xff0c;又变成让客户端来判断了&#xff0c;简单工厂模式是由工厂判断) 工厂方法模式优点: 1.符合开闭原则。 简单工厂模式…

Asp.Net Boilerplate微服务实战(二)架构解析

这一章节&#xff0c;我来介绍一下Asp.Net Boilerplate框架在微服务开发中所用到的技术及其大体的组织架构。由于本系列仅讨论ABP框架在微服务架构下的应用方案&#xff0c;不涉及具体的业务逻辑&#xff0c;所以在文中&#xff0c;不讨论服务拆分方案等细节&#xff0c;也未采…

Power Strings POJ - 2406(求一串字符串中有多少个循环节)

题意&#xff1a; 有一串字符串,问求出有多少个循环节连续重复组成&#xff0c;即可以用KMP直接求出循环节有多少个字符组成。答案就是l/next[l]&#xff08;刚开始理解错题意&#xff0c;认为是找出最多的重复子串&#xff09; 题目 Given two strings a and b we define a…

redis lua 抽奖 PHP,通过redis+lua实现加减库存

一. 场景下单后库存校验或者秒杀场景下&#xff0c;有很多利用“锁”的方案来解决问题。但是加锁其实是一件性价比很低的事&#xff0c;所以我们采用用redislua的方式来实现这个功能。二. 思路阶段一&#xff1a;在库存加减逻辑中分为2个步骤&#xff1a;STEP1.读取库存&#x…

[设计模式]简单工厂和工厂方法模式适用场景

简单工厂模式 适用场景: 1.工厂类负责创建的对象比较少&#xff0c;由于创建的对象较少&#xff0c;不会造成工厂方法中的业务逻辑太过复杂。 2.客户端只知道传入工厂类的参数&#xff0c;对于如何创建对象并不关心。 工厂方法模式 适用场景: 1.客户端不知道它所需要的对象…

Too Many Segments (easy version) CodeForces - 1249D1(贪心+差分)

题意 给多组线段&#xff0c;而每一个点的覆盖次数不超过K&#xff0c;每次可去除一个线段&#xff0c;问最少去多少线段以及线段的位置。 The only difference between easy and hard versions is constraints. You are given nn segments on the coordinate axis OX. Segme…

c#: 协变和逆变深度解析

环境&#xff1a;window 10.netcore 3.1vs2019 16.5.1一、为什么要有协变&#xff1f;首先看下面的代码&#xff1a;还有下面的&#xff1a;其实上面报错的是同一个问题&#xff0c;就是你无法用List<Fruit>指向List<Apple>&#xff01;我们的疑问在于&#xff0c;…

[设计模式]抽象工厂模式

抽象工厂模式针对的是产品族&#xff0c;而不是产品等级结构。 产品族:同一产地或者同一产商&#xff0c;功能不同。 产品等级:功能相同&#xff0c;产地或者厂商不同。 代码如下: #include <iostream> using namespace std;class AbstractApple { public:virtual vo…

Too Many Segments (hard version) CodeForces - 1249D2(贪心+容器vector+set)

题目 给多组线段&#xff0c;而每一个点的覆盖次数不超过K&#xff0c;每次可去除一个线段&#xff0c;问最少去多少线段以及线段的位置。 The only difference between easy and hard versions is constraints. You are given nn segments on the coordinate axis OX. Segme…

.net core HttpClient 使用之掉坑解析(一)

一、前言在我们开发当中经常需要向特定URL地址发送Http请求操作&#xff0c;在.net core 中对httpClient使用不当会造成灾难性的问题&#xff0c;这篇文章主要来分享.net core中通过IHttpClientFactory 工厂来使用HttpClient的正确打开方式。二、HttpClient使用中的那些坑2.1 错…

linux常用命令 java,Java工程在Linux常用命令

Java Web工程 在Linux下操作常用命令cd ../ 退出当前目录,前往父文件夹cd ezoffice 进入ezoffice文件夹ls 查看目录ps -ef|grep java 查看JAVA进程ps -aux |grep tomcat 查看tomcat进程 的进程号kill -9 12222 杀死ID为12222进程nohup ./startup.sh & 执行startup.sh&…

[设计模式]单例模式(懒汉式,饿汉式)

实现单例步骤: 1.构造函数私有化。 2.增加静态私有的当前类的指针变量。 3.提供静态对外接口&#xff0c;可以让用户获得单例对象。 单例 分为&#xff1a; 1.懒汉式 2.饿汉式 懒汉式 代码如下: class Singleton_lazy { public:static Singleton_lazy *getInstance(){if (pS…

By Elevator or Stairs? CodeForces - 1249E(动态规划)

题意 n层楼&#xff0c;a[i] (0<i<n)表示从 i 楼到 i 1 楼走楼梯的时间&#xff0c;b[i] (0<i<n)表示从 i 楼到 i 1 楼乘电梯的时间&#xff0c;其中每一次乘电梯需要等待 k 时间&#xff0c;楼梯和电梯一次均可上从 x 楼上升到 y 楼 ( y ! x )&#xff0c;即一…