蓝桥杯真题答疑

Posted 蔚尺丈八声

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了蓝桥杯真题答疑相关的知识,希望对你有一定的参考价值。

蓝桥杯真题【答疑】

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



public class Main 
    public static void main(String[] args) 
      /*
      思路:
      本题的目的是所有同学的s+a总时刻之和最少,但这里需注意的是,每个同学只有在前一个同学的s+a+e这一个
      流程都做完后,才能接着自己的流程。所有同学的s+a总时刻之和最少,注意是时刻,不是每个人单独走完自己
      s+a这个过程的时间,时刻在这里可以理解为每个同学到能够发消息前的等待时间,所以是所有同学轮到自己能够
      发消息的等待时间之和,每个同学自己的等待之间s+a叠加了前面同学过完一遍问问题流程s+a+e的时间,
      所以利用贪心算法的优先选择原理:
      1、优先选择s+a+e的同学用时最短的排到前面;
      2、如果两个同学s+a+e相同,那么比较s+a,把s+a短的放前边;
      3、排完序后计算每个同学的等待发送消息时刻,注意是叠加了前面同学完整问问题的时间,
      即T(i)=s(i)+a(i)+(T(i-1)+e(i-1)) T(1)=s(1)+s(1);
      4、所有同学总的等待时刻之和为sum(T(i));

      可以参考:
      https://blog.csdn.net/bdu_zhangAo/article/details/109714422

      import java.util.*;
      public class Main
          public static void main(String[] args) 
              Scanner scan = new Scanner(System.in);
              int n = scan.nextInt();
              People[] people = new People[n];
              for (int i=0;i<n;i++)
                  int s,a,e;
                  s=scan.nextInt();
                  a=scan.nextInt();
                  e=scan.nextInt();
                  people[i] = new People(s,a,e);
              
              Arrays.sort(people, new Comparator<People>() 
                  @Override
                  public int compare(People o1, People o2) 
                      if(o1.sum-o2.sum>0)
                        return 1;
                      else if(o1.sum-o2.sum<0)
                        return -1;
                      else if(o1.two>=o2.two)
                        return 1;
                      else
                        return -1;
                      
                  
              );
              long ans = 0,last=0,time=0;
              for (int i=0;i<n;i++)
                  ans += people[i].s+people[i].a +time;
                  time += people[i].sum;
              
              System.out.println(ans);
              scan.close();
          
      

      class People
          int s;
          int a;
          int e;
          int two;
          int sum;
          People(int s,int a,int e)
              this.s=s;
              this.a=a;
              this.e=e;
              this.sum=s+a+e;
              this.two=s+a;
          
      
      */
        Scanner scan = new Scanner(System.in);
        //在此输入您的代码...
        scan.close();
    

以上是关于蓝桥杯真题答疑的主要内容,如果未能解决你的问题,请参考以下文章

蓝桥杯省赛真题29Scratch飞翔的小猫 少儿编程scratch蓝桥杯省赛真题讲解

科技素养题少儿编程 蓝桥杯青少组科技素养题真题及解析第14套

蓝桥杯真题练习

蓝桥杯真题05

第十一届蓝桥杯大赛软件类决赛(C/C++ 大学A组)

蓝桥杯真题,求第二空的解析?