#B4215. [常州市程序设计小能手 2022] 均分纸牌
[常州市程序设计小能手 2022] 均分纸牌
题目背景
搬运自 http://czoj.com.cn/p/463。数据为民间数据。
题目描述
经历了忙碌而充实的一天,小 正准备上床睡觉,这时他看到书桌上有一些纸牌被分成了 堆, 堆纸牌排成一行,编号为 ,每堆纸牌有一定的张数(张数可能为 ,第 堆的张数记为 )。见此情景,小 脑海中瞬间浮现出一道经典的编程题《均分纸牌》,他觉得如果在原题的基础上修改一些条件,将是一道非常好的压轴题。
于是小 立刻拿出了纸和笔,认真地思考起来,首先他把全部纸牌的总张数改为不必为 的倍数,其次他将移动规则和最终目标也作了调整,移动规则改为可以在任意两堆之间移动任意张纸牌,目标是让张数最多的那堆纸牌的张数与张数最少的那堆纸牌的张数的差 。
已知将第 堆的一张纸牌移动到第 堆的代价为 , 的值等于 与 的差值,如 时, 等于 ,反之 时, 还是等于 ,也就是说无论你从第 堆向第 堆还是从第 堆向第 堆移动 张纸牌, 所需的代价均为 。
现在小 想知道为了达成目标,他所消耗的代价最小为多少?
输入格式
第一行一个整数 ,表示纸牌的堆数。
第二行有 个用空格隔开的非负整数,表示每堆纸牌的张数。
输出格式
一行一个整数,表示所消耗的最小代价。
5
5 9 2 12 9
8
提示
样例解释
- 堆号:。
- 张数:。
移动的方法有多种,其中的一种代价最小的方案:
- 第 堆向第 堆移动 张,成为:,消耗代价为 ;
- 第 堆向第 堆移动 张,成为:,消耗代价为 ;
- 第 堆向第 堆移动 张,成为:,消耗代价为 。
数据规模与约定
对于 的数据,,;
对于另外 的数据,保证纸牌的总数一定是 的倍数;
对于 的数据,,。