蓝桥杯真题答疑
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蓝桥杯省赛真题讲解