CF1856C To Become Max 题解 贪心

news2026/4/2 9:50:07

To Become Max

传送门

You are given an array of integers a a a of length n n n.

In one operation you:

  • Choose an index i i i such that 1 ≤ i ≤ n − 1 1 \le i \le n - 1 1in1 and a i ≤ a i + 1 a_i \le a_{i + 1} aiai+1.
  • Increase a i a_i ai by 1 1 1.

Find the maximum possible value of max ⁡ ( a 1 , a 2 , … a n ) \max(a_1, a_2, \ldots a_n) max(a1,a2,an) that you can get after performing this operation at most k k k times.

Input

Each test contains multiple test cases. The first line of input contains a single integer t t t ( 1 ≤ t ≤ 100 1 \le t \le 100 1t100) — the number of test cases. The description of the test cases follows.

The first line of each test case contains two integers n n n and k k k ( 2 ≤ n ≤ 1000 2 \le n \le 1000 2n1000, 1 ≤ k ≤ 1 0 8 1 \le k \le 10^{8} 1k108) — the length of the array a a a and the maximum number of operations that can be performed.

The second line of each test case contains n n n integers a 1 , a 2 , … , a n a_1,a_2,\ldots,a_n a1,a2,,an ( 1 ≤ a i ≤ 1 0 8 1 \le a_i \le 10^{8} 1ai108) — the elements of the array a a a.

It is guaranteed that the sum of n n n over all test cases does not exceed 1000 1000 1000.

Output

For each test case output a single integer — the maximum possible maximum of the array after performing at most k k k operations.

Example

input

6
3 4
1 3 3
5 6
1 3 4 5 1
4 13
1 1 3 179
5 3
4 3 2 2 2
5 6
6 5 4 1 5
2 17
3 5

output

4
7
179
5
7
6

Note

In the first test case, one possible optimal sequence of operations is: [ 1 , 3 , 3 ] → [ 2 , 3 , 3 ] → [ 2 , 4 , 3 ] → [ 3 , 4 , 3 ] → [ 4 , 4 , 3 ] [\textcolor{red}{1}, 3, 3] \rightarrow [2, \textcolor{red}{3}, 3] \rightarrow [\textcolor{red}{2}, 4, 3] \rightarrow [\textcolor{red}{3}, 4, 3] \rightarrow [4, 4, 3] [1,3,3][2,3,3][2,4,3][3,4,3][4,4,3].

In the second test case, one possible optimal sequence of operations is: [ 1 , 3 , 4 , 5 , 1 ] → [ 1 , 4 , 4 , 5 , 1 ] → [ 1 , 5 , 4 , 5 , 1 ] → [ 1 , 5 , 5 , 5 , 1 ] → [ 1 , 5 , 6 , 5 , 1 ] → [ 1 , 6 , 6 , 5 , 1 ] → [ 1 , 7 , 6 , 5 , 1 ] [1, \textcolor{red}{3}, 4, 5, 1] \rightarrow [1, \textcolor{red}{4}, 4, 5, 1] \rightarrow [1, 5, \textcolor{red}{4}, 5, 1] \rightarrow [1, 5, \textcolor{red}{5}, 5, 1] \rightarrow [1, \textcolor{red}{5}, 6, 5, 1] \rightarrow [1, \textcolor{red}{6}, 6, 5, 1] \rightarrow [1, 7, 6, 5, 1] [1,3,4,5,1][1,4,4,5,1][1,5,4,5,1][1,5,5,5,1][1,5,6,5,1][1,6,6,5,1][1,7,6,5,1].

以上来自 C o d e F o r c e s 以上来自CodeForces 以上来自CodeForces

题目翻译

给你一个长度为 n n n 的整数数组 a a a

在一次操作中,你

  • 选择一个索引 i i i ,使 1 ≤ i ≤ n − 1 1 \le i \le n - 1 1in1 a i ≤ a i + 1 a_i \le a_{i + 1} aiai+1 .
  • a i a_i ai 增加 1 1 1

求最多执行 k k k 次这一操作后, max ⁡ ( a 1 , a 2 , … a n ) \max(a_1, a_2, \ldots a_n) max(a1,a2,an) 的最大可能值。

输入格式

每个测试包含多个测试用例。第一行输入包含一个整数 t t t ( 1 ≤ t ≤ 100 1 \le t \le 100 1t100 ) - 测试用例的个数。测试用例说明如下。

每个测试用例的第一行包含两个整数 n n n k k k 2 ≤ n ≤ 1000 2 \le n \le 1000 2n1000 1 ≤ k ≤ 1 0 8 1 \le k \le 10^{8} 1k108 )–数组的长度 a a a 和可执行的最大操作数。

每个测试用例的第二行包含 n n n 个整数 a 1 , a 2 , … , a n a_1,a_2,\ldots,a_n a1,a2,,an ( 1 ≤ a i ≤ 1 0 8 1 \le a_i \le 10^{8} 1ai108 ) - 数组 a a a 的元素。

保证所有测试用例的 n n n 之和不超过 1000 1000 1000

输出格式

对每个测试用例输出一个整数,即数组最多执行 k k k 次操作后的最大值。

提示

在第一个测试案例中,一个可能的最佳操作顺序是 [ 1 , 3 , 3 ] → [ 2 , 3 , 3 ] → [ 2 , 4 , 3 ] → [ 3 , 4 , 3 ] → [ 4 , 4 , 3 ] [\textcolor{red}{1}, 3, 3] \rightarrow [2, \textcolor{red}{3}, 3] \rightarrow [\textcolor{red}{2}, 4, 3] \rightarrow [\textcolor{red}{3}, 4, 3] \rightarrow [4, 4, 3] [1,3,3][2,3,3][2,4,3][3,4,3][4,4,3] .

在第二个测试案例中,一个可能的最佳操作序列是: [ 1 , 3 , 4 , 5 , 1 ] → [ 1 , 4 , 4 , 5 , 1 ] → [ 1 , 5 , 4 , 5 , 1 ] → [ 1 , 5 , 5 , 5 , 1 ] → [ 1 , 5 , 6 , 5 , 1 ] → [ 1 , 6 , 6 , 5 , 1 ] → [ 1 , 7 , 6 , 5 , 1 ] [1, \textcolor{red}{3}, 4, 5, 1] \rightarrow [1, \textcolor{red}{4}, 4, 5, 1] \rightarrow [1, 5, \textcolor{red}{4}, 5, 1] \rightarrow [1, 5, \textcolor{red}{5}, 5, 1] \rightarrow [1, \textcolor{red}{5}, 6, 5, 1] \rightarrow [1, \textcolor{red}{6}, 6, 5, 1] \rightarrow [1, 7, 6, 5, 1] [1,3,4,5,1][1,4,4,5,1][1,5,4,5,1][1,5,5,5,1][1,5,6,5,1][1,6,6,5,1][1,7,6,5,1].

翻译: D e e p L 翻译:DeepL 翻译:DeepL

解题思路

先看数据范围: 2 ≤ n ≤ 1000 2 \le n \le 1000 2n1000,那么直接使用贪心。

暴力思想

枚举最终成为答案的数 a i a_i ai。一开始肯定要利用 a i + 1 a_{i+1} ai+1 a i a_i ai 变得尽可能大,这样的代价是最小的。当 a i > a i + 1 a_i>a_{i+1} ai>ai+1 时怎么办?利用 a i + 2 a_{i+2} ai+2 a i + 1 a_{i+1} ai+1 变大。

优化(贪心)

如果操作次数足够多,那么最终的序列肯定是形如 x , x − 1 , ⋯ , a n + 1 , a n x,x−1,⋯,a_n+1,a_n x,x1,,an+1,an 的。也就是说,依次枚举 j ∈ [ i + 1 , n ] j \in [i+1,n] j[i+1,n],当 a j ≥ a j − 1 a_j\ge a_{j−1} ajaj1 时,至多就可以让 a i a_i ai 变大 a j − a j − 1 + 1 a_j-a_{j−1}+1 ajaj1+1,此时更新答案即可。如果不满足, a j a_j aj 在后续的更新过程中肯定要变成 a j − 1 − 1 a_{j−1}−1 aj11,否则无法使 a i a_i ai 变得更大,提前更新 a j a_j aj 即可。

时间复杂度 O ( n 2 ) O(n^2) O(n2),写二分的是不是惊呆了。

AC Code

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int Maxn = 1000 + 5;
int n, k, a[Maxn];
int b[Maxn];
int ans;
inline int Binary_search(int n, int k);
inline void solve();
inline void work() {
	int T;
	cin >> T;
	while (T--) {
		solve();
	}
}
signed main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	work();
	return 0;
}
inline void solve() {
	cin >> n >> k;
	for (int i = 1; i <= n; i++) {
		cin >> a[i];
	}
	ans = Binary_search(n, k);
	cout << ans << endl;
}
inline int Binary_search(int n, int k) {
	int tmp, t;
	int ans = a[n];
	for (int i = n - 1; i >= 1; i--) {
		for (int j = 1; j <= n; j++) {
			b[j] = a[j];
		}
		t = k;
		for (int j = i + 1; j <= n && t > 0; j++) {
			if (b[j] < b[j - 1]) {
				t -= b[j - 1] - 1 - b[j];
				b[j] = b[j - 1] - 1;
			} else {
				tmp = min(1ll * (b[j] - b[j - 1] + 1) * (j - i), t);
				t -= tmp;
				b[i] += tmp / (j - i);
			}
			ans = max(ans, b[i]);
		}
	}
	return ans;
}

吐槽一下洛谷对于该题的提示的染色问题。详见此处。

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

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

相关文章

Power Apps 向Power Automate传一个数组参数

Power Apps传Power Automate数组参数 背景Power Apps传参方法画布开发我们现在power apps中设置一个集合**ArrCollect**准备一个按钮 Power Automate接收总结画布流 背景 我们通常会从Power Apps界面传递参数给Flow中&#xff0c;但是很多时候仅仅是一个字符串类型的已经不适用…

超融合系统疑难故障定位与解决实践 3 例(含信创技术栈)

当 IT 系统出现故障&#xff0c;问题定位往往是运维人员最头疼的环节。尤其是超融合系统&#xff0c;由于整体涉及的技术栈比较复杂&#xff0c;且有越来越多的用户基于信创环境进行部署&#xff0c;非常考验厂商和技术人员的专业能力&#xff1a;厂商研发和售后工程师不仅应能…

web安全学习笔记【07】——非http\https抓包

#知识点&#xff1a; 1、Web常规-系统&中间件&数据库&源码等 2、Web其他-前后端&软件&Docker&分配站等 3、Web拓展-CDN&WAF&OSS&反向&负载均衡等 ----------------------------------- 1、APP架构-封装&原生态&H5&flutter…

2024年了你还在用百度翻译?手把手教会你使用AI翻译!一键翻译网页和PDF文件!

一些结论 沉浸式翻译是一款免费的AI驱动的双语网页翻译扩展工具。 主要功能包括&#xff1a;一键网页翻译&#xff0c;PDF翻译&#xff0c;输入框翻译&#xff0c;鼠标悬停翻译等多种翻译场景。 目前核心功能均免费使用。 沉浸式翻译是什么&#xff1f; 沉浸式翻译是一款免费的…

低噪声放大器LNA 之 噪声系数

​ 一、噪声系数的定义 在定义噪声系数之前&#xff0c;先看一个放大器输入输出端信噪比&#xff08;信号功率与噪声功率之比&#xff0c;写作SNR&#xff09; 对比图&#xff1a; ​​从上图可用看出&#xff0c;从输入端到输出端&#xff0c;信号和噪声功率都得到了放大&…

5G网络变压器应用领域

5G网络变压器在多个应用领域发挥着重要作用。以下是一些主要的应用领域&#xff1a; 1. **通信基站&#xff1a;** 5G网络变压器在通信基站中扮演关键角色。它们用于转换电力&#xff0c;确保通信基站设备的正常运行。稳定的电力供应对于保障高速、高频率的5G通信至关重要。 …

计算机网络-以太网链路聚合简介

一、网络可靠性是什么&#xff1f; 网络的可靠性指当设备或者链路出现单点或者多点故障时保证网络服务不间断的能力。 实际工作中网络需要保证可靠性&#xff0c;实现冗余设计。会从三个层次实现&#xff1a; 链路冗余 单板冗余 整机设备冗余 网络的可靠性指当设备或者链路出现…

【操作系统】实验三 编译 Linux 内核

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f3c7;码字不易&#xff0c;你的&#x1f44d;点赞&#x1f64c;收藏❤️关注对我真的很重要&…

《WebKit 技术内幕》学习之十二(1):安全机制

第12章 安全机制 安全机制对于浏览器和渲染引擎来说至关重要。一个不考虑安全机制的HTML5规范体系肯定不会受到广泛地使用&#xff0c;同时一个不安全的浏览器也不会得到广大用户的青睐。本章介绍的安全机制分成两个不同的部分&#xff0c;第一个部分是网页的安全&#xff0c;…

EVRPD-44U电机保护器参数设置您了解了么?

EVRPD-44U电机保护器是一款用于电动机保护的设备&#xff0c;其产品参数设置如下&#xff1a; 额定电流&#xff1a;EVRPD-44U电机保护器的额定电流为5-80A&#xff0c;可以根据实际负载电流进行选择。启动时间&#xff1a;电机保护器的启动时间可以通过设置菜单进行修改&…

动态规划解决马尔可夫决策过程

马尔可夫决策过程是强化学习中的基本问题模型之一&#xff0c;而解决马尔可夫决策过程的方法我们统称为强化学习算法。 动态规划&#xff08; dynamic programming, DP &#xff09;具体指的是在某些复杂问题中&#xff0c;将问题转化为若干个子问题&#xff0c;并在求解每个子…

实用VBA:17.大量word文件中的文本内容进行批量替换

1.需求场景 在工作中可能会遇到需要对大量word文件中的文字内容进行批量替换的情况。相比excel的批量处理&#xff0c;个人感觉word文档中由于包含大量样式信息&#xff0c;批处理时总感觉有顾虑。一者担心影响了文档的格式&#xff0c;误修改了文档的样式&#xff0c;那后果……

9.scala 伴生对象、伴生类、case class、case object

目录 概述伴生case 相关特性结束 概述 比较 case class vs class 1.toString equals hashcode 重写 2.不用 new 3.默认实现了序列化接口 case class vs case object 1.case class 修饰的类&#xff0c;必须要有参数列表 2.case object 修饰的对象&#xff0c;必须不能有参数列…

Redis(发布订阅、事务、redis整合springboot、集成 Spring Cache)

目录 一.redis的发布订阅 1、什么 是发布和订阅 2、Redis的发布和订阅 3、发布订阅的代码实现 二.Redis事务 1.事务简介 1、在事务执行之前 如果监听的key的值有变化就不能执行 2、在事务执行之前 如果监听的key的值没有变化就能执行 3、Exec之前就出现错误 4、Exec之…

多窗口大小和Ticker分组的Pandas滚动平均值

最近一个学弟在在进行数据分析时&#xff0c;经常需要计算不同时间窗口的滚动平均线。当数据是多维度的&#xff0c;比如包含多个股票或商品的每日价格时&#xff0c;我们可能需要为每个维度计算滚动平均线。然而&#xff0c;如果我们使用传统的groupby和apply方法&#xff0c;…

小红书商品笔记发布流程,如何避免盘营销

随着平台营销内容不断被管制&#xff0c;商品笔记慢慢出现在了人们的视野&#xff0c;这同时也意味着达人和品牌方们&#xff0c;可以名正言顺的在笔记内容中植入产品。商品链接的开通意味着&#xff0c;不管是达人还是品牌转化率都会进一步提升&#xff0c;今天来马文化传媒和…

遇到流氓软件无法删除?强制删除文件解救你!

在使用电脑的过程中&#xff0c;我们有时会遇到一些文件无法正常删除的情况&#xff0c;这可能是由于文件被其他程序占用或者权限问题。本文将介绍三种常见的方法&#xff0c;详细解释如何在电脑上强制删除文件&#xff0c;以便用户在面对这一问题时能够快速解决。 方法1&#…

数据挖掘笔记1

课程&#xff1a;清华大学-数据挖掘&#xff1a;理论与算法&#xff08;国家级精品课&#xff09;_哔哩哔哩_bilibili 一、Learning Resources 二、Data 数据是最底层的一种表现形式。数据具有连续性。从存储上来讲&#xff0c;数据分为逻辑上的和物理层的。大数据&#xff1…

python-分享篇-代码雨

文章目录 代码效果 代码 import sys import random import pygame from pygame.locals import *# 屏幕大小 WIDTH 800 HEIGHT 600 # 下落速度范围 SPEED [15, 30] # 字母大小范围 SIZE [5, 30] # CODE长度范围 LEN [1, 8]# 随机生成一个颜色 def randomColor():return (r…

按条件自动搜索文件

在计算机的某个文件夹中&#xff0c;假如有一大堆不同格式的文件&#xff0c;如下图&#xff1a; 我们的目的&#xff1a;快速查找出文件名中包含某文字内容的指定格式的文件&#xff0c;看看它们都放在哪里&#xff1f;通过分析&#xff0c;可能在当前文件夹中也可能在某个子…