输入实例:
3
10000 10000 10000
20000 50000 20000
30000 20000 30000
输出结果:
280000
分析:
这个题目是得到发消息时间最短,就相当于每个人的完成问题的时间在群里发消息。
例如,按照1,3,2的顺序来说:
第一个人:a1+a2
第二个人:a1+a2+a3+c1+c2
第三人:a1+a2+a3+c1+c2+c3+b1+b2
代码:
import java.io.IOException;
import java.util.Arrays;
import java.util.Scanner;
public class 答疑 {
public static void main(String[] args) throws IOException {
Scanner in=new Scanner(System.in);
int n = in.nextInt();
user[] u=new user[n];
for (int i = 0; i < n; i++) {
int a=in.nextInt();
a+=in.nextInt();
int c=in.nextInt();
u[i]=new user(a,c,a+c);
}
Arrays.sort(u);
System.out.println(Arrays.toString(u));
long m=0;
for (int i = 0; i < n; i++) {
m += (n-i)*u[i].ab+(n-i-1)*u[i].c; //按照规律得出这样的结果
}
System.out.println(m);
}
static class user implements Comparable<user> {
int ab;
int c;
int sum;
public user(int ab, int c, int sum) {
this.ab = ab;
this.c = c;
this.sum = sum;
}
public user() {
}
@Override
public int compareTo(user u) {
return this.sum-u.sum;
}
@Override
public String toString() {
return "user [ab=" + ab + ", c=" + c + ", sum=" + sum + "]";
}
}
}