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;
}
相关推荐
誰能久伴不乏1 小时前
桌面客户端的运行日志系统:SQLite 分块 + 独立写线程 + 文本降级
数据库·c++·qt·架构·sqlite
BK贝壳4 小时前
亿级用户签到位图选型复盘:用 bool-hybrid-array 扛冷启动打卡,也把它和 Roaring/Redis 的边界测清楚了
数据结构·python·性能优化·numpy
2601_966949656 小时前
如何根据研究的起止时间截取分钟级行情?Python 实战与 QuantDash 数据处理指南
开发语言·python·pandas·量化交易·1024程序员节·股票数据·quantdash
拓恒技术8 小时前
无人机巡检AI算法的工程化落地:从需求到交付的5个核心环节
人工智能·算法·无人机
晨曦中的暮雨8 小时前
限流算法——固定窗口、滑动窗口、漏桶、令牌桶
java·开发语言·算法
怕浪猫8 小时前
Claude Code vs Codex:Computer Use 实现原理深度拆解
算法·面试·github
喵了几个咪8 小时前
GoWind CMS 拆解:在 Go 里给 TipTap 搭一套 Yjs 协同后端
开发语言·后端·golang
程序员清风9 小时前
数据处理脚本工程化:日志、配置、命令行与测试
服务器·开发语言·数据库
罗西的思考10 小时前
AI 时代的 “房谋杜断”:如何培养能力、品味与判断力
人工智能·算法·机器学习
淡海水10 小时前
07-02-源码-.NET Core GC分配路径
算法·unity·c#·.netcore·gc·1024程序员节