import java.util.PriorityQueue; import java.util.Scanner; public class Main { public static void main(String[] args){ Scanner in = new Scanner(System.in); while(in.hasNext()){ // solution1(in); solution2(in); } } /** * 模拟法: 数组 * * n=4时 * a b c d * * 从前往后 * score = a*b + (a+b)*c + (a+b+c)*d = ab+ac+ad+bc+bd+cd * * 从后往前 * score = c*d + (c+d)*b + (b+c+d)*a = ab+ac+ad+bc+bd+cd * * 其他情况同理, 不管什么顺序, 结果都一样. * * @param in */ private static void solution1(Scanner in){ int n = in.nextInt(); int[] w = new int[n]; int sum = 0; int score = 0; for(int i=0; i<n; i++){ w[i] = in.nextInt(); if(i > 0){ sum += w[i-1]; score += sum*w[i]; } } System.out.println(score); } /** * 模拟法: 最大堆 * @param in */ private static void solution2(Scanner in){ int n = in.nextInt(); PriorityQueue<Integer> maxHeap = new PriorityQueue<>((o1, o2) -> o2-o1); for(int i=1; i<=n; i++){ maxHeap.offer(in.nextInt()); } int score = 0; int max1,max2; while(maxHeap.size() > 1){ max1 = maxHeap.poll(); max2 = maxHeap.poll(); score += max1*max2; maxHeap.offer(max1+max2); } System.out.println(score); } }