#620. 餐厅排队叫号

餐厅排队叫号

餐厅排队叫号

故事背景

一家热门餐厅采用“叫号排队”的方式招待顾客。每一位顾客点餐后,厨师需要一段时间来完成这位顾客的菜品。不同顾客的菜品复杂度不同,所需处理时间也不同。

店长希望合理安排出菜顺序,让所有顾客的总等待时间尽可能短,这样大家的体验会更好。你需要根据每位顾客的处理时间,帮助店长设计一个出菜顺序。

题目描述

共有 nn 位顾客在排队,第 ii 位顾客的订单需要 tit_i 分钟完成。假设:

  • 厨房一次只能处理一位顾客的订单;
  • 一旦开始做某位顾客的菜,中途不能中断;
  • 第一个被服务的顾客等待时间为 0 分钟;
  • 每位顾客的等待时间等于在他之前所有顾客订单处理时间之和。

你可以自行决定出菜顺序。请计算,在最优安排下,所有顾客等待时间之和的最小值。

输入格式

  • 第一行包含一个整数 nn,表示顾客数量。
  • 第二行包含 nn 个整数,其中第 ii 个为 tit_i,表示第 ii 位顾客订单所需时间。

输出格式

  • 输出一行,一个整数,为在最优安排下所有顾客等待时间之和的最小值。

输入输出样例 #1

输入 #1

4
3 1 4 2

输出 #1

10

样例解释 #1

一种最优安排是将处理时间按升序排序:1、2、3、4。

  • 第 1 位顾客等待时间为 0;
  • 第 2 位顾客等待时间为 1;
  • 第 3 位顾客等待时间为 1 + 2 = 3;
  • 第 4 位顾客等待时间为 1 + 2 + 3 = 6。

总等待时间为 0+1+3+6=100 + 1 + 3 + 6 = 10,这是所有安排中可能的最小值。

说明/提示

  • 对于所有测试数据,保证 1n2×1051 \le n \le 2 \times 10^5
  • 每位顾客的处理时间满足 1ti1091 \le t_i \le 10^9
  • 输出结果可能较大,请使用 64 位整数类型存储。