首页 > 其他分享 >Codeforces Round 819 (Div. 1 + Div. 2) and Grimoire of Code Annual Contest 2022 A. Mainak and Array

Codeforces Round 819 (Div. 1 + Div. 2) and Grimoire of Code Annual Contest 2022 A. Mainak and Array

时间:2023-09-10 18:44:57浏览次数:43  
标签:std begin Code Contest int max Max Div

给一个长为 \(n\) 的正整数数组,执行以下操作严格一次。

  • 选择 \(l, r, (1 \leq l < r \leq n)\) ,任意一个正整数 \(k\) 。
  • 重复 \(k\) 次:让 \([l, r]\) 的数组成环,按顺时针走一次。

希望 \(a_n - a_1\) 最大,找到这个数。

分类讨论题。

  • 先判断 \(n\) 为 \(1\) 时 \(a_n - a_1\) 恒为 \(0\) ,因为以下操作至少需要两个数(迭代器可能越界)
  • 选择的环不包括 \(a_1\) \(a_n\) ,则 \(a_n - a_1\) 恒不变
  • 选择的环包括 \(a_1\) \(a_n\) ,则 \((a_n - a_1)_{max} = (a_{i + n - 1} - a_i)_{max}\) 。可以破环为链 \(O(n)\) 计算。
  • 选择的环包括 \(a_1\) 不包括 \(a_n\) ,则 \((a_n - a_1)_{max} = max_{i=2}^{n} a_i - a_1\) 。
  • 选择的环包括 \(a_n\) 不包括 \(a_1\) ,则 \((a_n - a_1)_{max} = a_n - min_{i=1}^{n-1} a_i\) 。
view
#include <bits/stdc++.h>
void solve() {
	int n; std::cin >> n;
	std::vector<int> a(n+1);
	for (int i = 1; i <= n; i++) std::cin >> a[i];
	int Max = a[n] - a[1];
	if (n > 1) {
		Max = std::max(Max, a[n] - *std::min_element(a.begin() + 1, a.begin() + n));
		Max = std::max(Max, *std::max_element(a.begin() + 2, a.end()) - a[1]);
		for (int i = 1; i <= n; i++) a.push_back(a[i]);
		for (int i = 1; i <= n; i++) Max = std::max(Max, a[i + n - 1] - a[i]);
	}
	std::cout << Max << '\n';
}
signed main() {
	int _ = 1; std::cin >> _;
	while (_--) solve();
	return 0;
} 

标签:std,begin,Code,Contest,int,max,Max,Div
From: https://www.cnblogs.com/zsxuan/p/17691642.html

相关文章

  • Codeforces Round 830 (Div. 2) B. Ugu
    给一个\(01\)字符串,需要使它变为非降的,可以执行以下操作:选择一个下标\(i,(1\leqi\leqn)\),\(\forallj\geqi\)的数位翻转。经典的按无后效性翻转问题。考虑从前往后,得到一个全\(0\)串。若开始存在\(1\),则答案减\(1\)。如果存在\(1\),遇到\(1\)便翻转后......
  • LeetCode209.长度最小的子数组
    9月8日LeetCode209.长度最小的子数组https://leetcode.cn/problems/minimum-size-subarray-sum/description/学习内容题目的内容是给一个正整数的数组及目标值target,找到大于等于目标值的连续数组最小长度的区间。容易想到的方法是两层for来遍历,分别表示区间终止位置和区间起始位......
  • Leetcode刷题本地debug框架搭建
    思路1.初版cmake+单一.cpp文件参考:https://blog.songjiahao.com/archives/3622.改良版cmake+源文件、头文件(含List、Tree等数据结构)分离+gtest参考:https://github.com/Pokerpoke/LeetCode Normal模板以Leetcode1两数之和为例#include<iostream>#include......
  • 2019-2020 ACM-ICPC Brazil Subregional Programming Contest
    D.DenouncingMafia给定一颗树,然后给定\(k\)个起点,对于每个起点来说,从该点到根节点的一条链都会被染色,求最多有几个点会被染色\(3\leqn\leq1e5,1\leqk\leqn\)题解我们贪心的来看,起点一定会选择在叶子节点,假设叶子节点的数量为\(cnt\),所以如果\(k\geqcnt\),那么......
  • $Codeforces Round 891 (Div. 3)$
    \(A.ArrayColoring\)显然需要奇数个偶数即可满足题目。voidsolve(){intn=read(),res=0;for(inti=1;i<=n;i++){intx=read();if(x%2)res++;}puts(res%2==0?"YES":"NO");//puts(ans>0?"Yes":"No&......
  • LeetCode刷题笔记
    算法1.差分数组+前缀和1589.所有排列中的最大和-力扣(LeetCode)对于每一次遍历都有m个数需要加1,如果对这些数遍历,则需要O(m)复杂度,此时可以记录这m个数的差分数组:​ 这样就可以把时间复杂度缩小到O(1),之后求前缀和就可以得到原来的数组。2.线性筛(欧拉筛)求素数2601.质数减法......
  • vscode运行Python调取文件报错 运行调试配置的问题
    报错原因:报错信息提示的是没有那个文件,但是那明明是有文件的,而且在终端运行没问题,这是因为vscode配置的原因,小伙伴按下面的方法解决即可!!!解决办法:"cwd":${fileDirname}把这个加到配置文件里: ......
  • leet code 35.搜索插入位置
    简单题蕴含大学问linkleetcode35.搜索插入位置思路历程学习算法已有时日,再做这一道简单程度的二分题目时-发现还是不能游刃有余地掌握。题目中要求:需要在数组中找到目标值,并返回其索引,如果目标值不存在于数组中的话,返回其将会被顺序插入的位置。那么有两种情况目标值在数组中......
  • #yyds干货盘点# LeetCode程序员面试金典:用栈实现队列
    题目:请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:voidpush(intx) 将元素x推到队列的末尾intpop() 从队列的开头移除并返回元素intpeek() 返回队列开头的元素booleanempty() 如果队列为空,返回 true ......
  • #yyds干货盘点# LeetCode程序员面试金典:等差数列划分
    1.简述:如果一个数列 至少有三个元素 ,并且任意两个相邻元素之差相同,则称该数列为等差数列。例如,[1,3,5,7,9]、[7,7,7,7] 和 [3,-1,-5,-9] 都是等差数列。给你一个整数数组 nums ,返回数组 nums 中所有为等差数组的 子数组 个数。子数组 是数组中的一个连续序列。 示例1......