2021-12-25
文章目录
A.Closing The Gap
题目
一排有 n 个方块塔,其中塔 i 的高度为 a i a_i ai。你是建筑团队的一员,你想让建筑看起来尽可能漂亮。在一天之内,您可以执行以下操作:
选择两个索引 i 和 j (1≤i,j≤n; i≠j),将一个方块从塔 i 移动到塔 j。这实质上是将 a i a_i ai 减少了 1,而将 a j a_j aj 增加了 1。
你认为建筑物的丑陋是最高和最短建筑物之间的高度差。形式上,丑陋被定义为 max(a)−min(a)。
在任意天数之后,您可以达到的最小可能丑度是多少?
输入
第一行包含一个整数 t (1≤t≤1000)——测试用例的数量。然后是 t 个案例。
每个测试用例的第一行包含一个整数 n (2≤n≤100)——建筑物的数量。
每个测试用例的第二行包含 n 个空格分隔的整数 a 1 , a 2 , … , a n ( 1 ≤ a i ≤ 1 0 7 ) a_1,a_2,…,a_n (1≤a_i≤10^7) a1,a2,…,an(1≤ai≤107)——建筑物的高度。
输出
对于每个测试用例,输出一个整数——建筑物的最小可能丑陋程度。
题解:
如果 max(a)−min(a) 严格大于 1,您可以分别对 max 和 min 应用操作,这使它们彼此更接近。 换句话说,它要么减小 max(a)−min(a) 要么保持不变。 这意味着答案总是≤1。 现在剩下的就是确定答案是 0 还是 1。如果数组的总和可以被 n 整除,那么答案只能是 0,因为数组的总和在一次运算之后不能改变,并且如果它不能被 n 整除 n 你不能让每个元素都相等。 这意味着如果总和可被 n 整除,则答案为 0,否则为 1。
code:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<int,int> pii;
const int maxn=1e6+5;
void solve(){
int n;
cin >> n;
int a[1000] = {
0};
int sum = 0;
int maxx = 0;
for (int i = 0; i < n;i++){
cin >> a[i

本文探讨了三道编程竞赛题目,涉及数组处理和优化策略。第一题讨论了通过移动方块减少建筑物高度差的问题,揭示答案总是小于等于1,并提供了一种判断何时答案为0的方法。第二题涉及在有限操作下使数组按位AND非零,通过计算最大子序列的按位AND非零,找到所需删除的最小元素数。最后一题是关于光明节烛台的,需要通过操作使蜡烛的点亮模式匹配目标模式,分析了偶数和奇数操作的情况。通过这些策略,参赛者可以在编程竞赛中更好地解决问题。
最低0.47元/天 解锁文章
1436





