Java答疑

文章描述了一种场景,n位同学按顺序找老师答疑,目标是通过合理安排答疑顺序,使所有同学在课程群中发消息的总时间最小。文章提及了时间的计算方法和使用快速排序算法进行优化。
摘要由CSDN通过智能技术生成

题目描述
有n位同学同时找老师答疑。每位同学都预先估计了自己答疑的时。
老师可以安排答疑的顺序,同学们要依次进入老师办公室答疑位同学答疑的过程如下
1首先进入办公室,编号为的同学需要 s,毫秒的时间2.然后同学问问题老师解答,编号为的同学需要 a;毫秒的时
3.答疑完成后,同学很高兴,会在课程群里面发一条消息,需要的时间可 以忽略
4.最后同学收拾东西离开办公室,需要 e;毫秒的时间。一般需要10秒、20秒或30 秒,即e;取值为 10000,20000 或30000
位同学离开办公室后,紧接着下一位同学就可以进入办公室了
答疑从0时刻开始。老师想合理的安排答疑的顺序,使得同学们在课程群里面发消息的时刻之和最小。

输入描述
输入第一行包含一个整数n,表示同学的数量
接下来n行,描述每位同学的时间。其中第行包含三个整数siai,ei,意义如上所述
其中有,1<n<1000,1<s;< 60000,1<a<10,eiE 10000,20000,30000,即ei一定是10000、20000、30000之一
输出描述
输出一个整数,表示同学们在课程群里面发消息的时刻之和最小是多少。
输入输出样例
示例
输入
10000 10000 10000
20000 50000 20000
30000 20000 30000

输出

280000

import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        //在此输入您的代码...
        int n = scan.nextInt();
        long[][] arr = new long[n][2];
        for(int i = 0;i < n;i++) {
          arr[i] = new long[2];
          arr[i][0] = scan.nextLong()+scan.nextLong();
          //将进入办公室和解答时间合二为一,便于计算
          arr[i][1] = scan.nextLong();
        }
        Main.sort(arr, 0, n - 1);
        long eve = 0;
        long sum = 0;//同学发消息时间之和
        for(int i = 0;i < n;i++) {
          eve = arr[i][0] + eve;
          sum += eve;
          eve += arr[i][1];
        }
        System.out.println(sum);
        scan.close();
    }
    public static void sort(long[][] arr,int left,int right) {//快速排序
      int i,j;
      long[] key = new long[2];
      if(left > right) return ;
      i = left;
      j = right;
      key = arr[i];
      while(i < j) {
        while(i < j&&arr[j][0]+arr[j][1] >= key[0]+key[1]) j--;
        //比较的依据应该是每个同学的总答疑时间
        arr[i] = arr[j];
        while(i < j&&arr[i][0]+arr[i][1] <= key[0]+key[1]) i++;
        arr[j] = arr[i];
      }
      arr[i] = key;
      sort(arr,left,i - 1);
      sort(arr,i+1,right);
    }
}

注意:这道题要搞清楚n同学们问题的先后顺序应该由什么决定。假设有A,B两位同学,A同学所用时间为a1,a2(a1为进入办公室和解题时间之和),B所用时间为b1,b2。若A先进教室,所用时间sum = a1+(a1+a2+b1),若B先进教室sum = b1+(b1+b2+a1),由两式可知是A还是B先进教室取决于a1+a2和b1+b2,因此在本题题解中,在使用排序时就应该以一个同学的问题总时间为比较的标准进行排序。

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值