1400*B. Toy Blocks

Example

input

复制代码
3
3
3 2 2
4
2 2 3 2
3
0 3 0

output

复制代码
1
0
3

解析:

对于某个盒子,我们用其余盒子的最大值 mx 乘以其余的盒子数量(n-1),再减去其余盒子当前的数量 ( sum-a i ),即为需要补上的数量 cnt

现在这个盒子中有 p 个

1. 如果 p<=cnt, 说明当前盒子的玩具全部分到别的盒子依然不够,所以要补上 cnt-p 个。

2. 如果 p>cnt ,说明当前盒子的玩具全部分到别的盒子还会多出一部分,这一部分必须平均分出去使得其余盒子都相同,所以先对于 n-1 取模,剩余的数量再补上 (n-1)- p个,即为所求。

全部取最大值即为答案。

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+5;
ll t,n,a[N],f1,f2,sum;
int main(){
	scanf("%lld",&t);
	while(t--){
		scanf("%lld",&n);
		ll sum=0;
		for(int i=1;i<=n;i++){
			scanf("%lld",&a[i]);
			sum+=a[i];		//计算总和 
		}
		ll res=0,mx;
		sort(a+1,a+n+1);	//排序 
		for(int i=1;i<=n;i++){
			if(i==n) mx=a[n-1];		// mx为除了当前 i 之外的最大值 
			else mx=a[n];
			ll cnt=(n-1)*mx-(sum-a[i]);		//计算剩余需要补上的差 
			if(a[i]<=cnt) res=max(res,cnt-a[i]);	//不够,则差即为要补上的值 
			else{
				ll p=a[i]-cnt;	//否则,取模并且计算差值 
				if(p%(n-1)!=0){
					p%=(n-1);
					res=max(res,n-1-p);
				}
			}
		}
		printf("%lld\n",res);
	}
	return 0;
}
相关推荐
ShineWinsu18 分钟前
对于Qt:QListWidget常见属性以及QListWidgetItem类的解析
开发语言·c++·qt·客户端·列表·qlistwidget·qlistwidgetitem
坤坤子吖32 分钟前
Linux网络编程:自定义应用层协议与 JSON 序列化
linux·服务器·网络·c++·笔记·json
吴名氏.36 分钟前
Java转AI Agent教程(第十二周)检索与切分
java·开发语言·人工智能·ai·ai agent
lisw051 小时前
Dayhoff的PAM替换矩阵理论评介!
线性代数·算法·矩阵
瑞雪兆丰年兮1 小时前
JavaWeb-day10-SpringBootWeb案例
java·开发语言·javaweb·web
Elastic 中国社区官方博客1 小时前
更少的位数,相同的召回率:DiskBBQ 更保守的自动校准扫描
大数据·运维·开发语言·人工智能·elasticsearch·搜索引擎
阿卡好可爱2 小时前
Lua 热更新不生效:改完文件线上仍是旧逻辑,package.loaded 与 upvalue 重绑定详解
数据结构·分布式·后端·架构·lua
一起学安全技术2 小时前
拆大模型 03|注意力的一句话版本:不用论文讲清 Attention
深度学习·算法·语言模型·transformer
三雷科技2 小时前
第6章第4节:自定义分词器
开发语言·c#
沫璃染墨2 小时前
从零入门计算机网络系列(十八):TCP连接管理详解——从三次握手与四次挥手到TIME_WAIT机制
运维·服务器·网络·c++·网络协议·tcp/ip·tcp