答疑
答疑
题目
输入输出样例
示例
输入
3 10000 10000 10000 20000 50000 20000 30000 20000 30000
输出
280000
解题思路
贪心
对每个学生所需的总时间按升序排序
然后逐个遍历,计算当前发信息的时间,加入总时间(要输出的结果)
由于前一个学生出去后一个才可以进来,所以后面要在加上一个出去的时间
解题代码
注意
会爆int
package 蓝桥杯.真题2020; import java.io.*; import java.util.Arrays; import java.util.Comparator; import java.util.stream.Stream; public class 答疑 { static StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in))); static PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out))); public static long in() throws IOException { in.nextToken(); return (long) in.nval; } public static void main(String[] args) throws IOException { //读入 int n = (int) in(); Stu[] s = new Stu[n]; for ( int i=0; i<n; i++ ) { s[i] = new Stu(); s[i].s = in(); s[i].a = in(); s[i].e = in(); } //排序 //按照每个人所需的总时间升序 Arrays.sort(s, new Comparator<Stu>() { @Override public int compare(Stu o1, Stu o2) { return (int) ((o1.s+o1.a+o1.e)-(o2.s+o2.a+o2.e)); } }); long ans = 0; long cur = 0; for ( int i=0; i<n; i++ ) { //当前发信息的时间 距离开始的时间 cur = cur+s[i].s+s[i].a;//发信息为答疑完发信息 ans += cur;//加入答案 cur += s[i].e;//出去需要时间,当前时间向后 } System.out.println(ans); } } class Stu { long s;//进入的时间 long a;//答疑时间 long e;//收拾出去的时间 }