#PTA2025L201. 时间的回响

时间的回响

题目背景

在连续出题的几天里,出题人没活了,只能咬打火机了。

但很不幸的是,打火机炸缸了,出题人被炸出了走马灯。

他想起了两年前刚入社的那段时光,自己什么都不会,是个写 Dijkstra\texttt{Dijkstra} 会忘了改小根堆、写二分一直 TLE\texttt{TLE}、不会算值域一直 #define int long long\texttt{\#define int long long}、线段树经常写 RE\texttt{RE}、…………、码风极其丑陋的神人。

同时他想起了那时不会做的一个题,他发现这题非常适合出,于是放了进来。

题目描述

给定 nn 个整数序列,每个序列的长度均为 mm。你可以将这 nn 个序列作为一个个整体,按照任意的顺序进行全排列。

排列完成后,将它们按顺序首尾相接,拼成一个长度为 n×mn \times m 的长序列,记为 aa(序列下标从 11 开始,即 a1,a2,,an×ma_1, a_2, \dots, a_{n \times m})。

你的任务是寻找一种最优的排列顺序,使得拼接后的长序列 aa 的加权和最大。长序列加权和的计算公式为:

i=1n×mi×ai\sum_{i=1}^{n \times m} i \times a_i

输入格式

第一行包含两个整数 nnmm1n,m1051\le n, m\le 10^51n×m1051\le n \times m \le 10^5),分别表示序列的数量和每个序列的长度。

接下来 nn 行,每行包含 mm 个整数。其中第 ii 行的第 jj 个整数表示第 ii 个序列的第 jj 个元素的值 ai,ja_{i, j}1ai,j1081\le a_{i,j} \le 10^8)。

输出格式

输出一个整数,表示在所有可能的拼接顺序中,能够获得的最大加权和。

样例

2 3
3 1 2
1 1 1
35

数据范围

共有 2525 组测试点。

对于前 55 组测试点,1n×m201\le n\times m\le 20

对于后 2020 组测试点,1n×m1051\le n\times m\le 10^5