明显感觉到这题很难,15分,丢十分,两个超时一个错误,如果不用Scanner,使用BufferReader的话,可以减少两个超时的问题,也就是23分,不太懂BufferReader
import java.text.DecimalFormat; import java.util.*; public class Main { public static class Mooncake implements Comparable<Mooncake>{ public Mooncake(){} public Mooncake(double count,double price){ this.count = count; this.price = price; this.unit = price/count; } double count; double price; double unit; @Override public int compareTo(Mooncake o) { if (this.unit<o.unit){ return 1; } if (this.unit>o.unit){ return -1; } else{ return 0; } } } public static void main(String[] args) { // write your code here Scanner sc=new Scanner(System.in); int n=sc.nextInt(); double d=sc.nextInt(); double[] c=new double[n];//数量 double[] p=new double[n]; DecimalFormat df=new DecimalFormat("0.00"); double[] unit=new double[n]; for (int i=0;i<n;i++){ c[i]=sc.nextInt(); } for (int i=0;i<n;i++){ p[i]=sc.nextInt(); } List<Mooncake> mooncakes=new ArrayList<Mooncake>(); //将每个Mooncake对象加入list for (int i=0;i<n;i++){ Mooncake m=new Mooncake(c[i],p[i]); mooncakes.add(m); } Collections.sort(mooncakes); double sum=0; double co=0;//月饼加个从高到低销量累加 for (int i=0;i<mooncakes.size();i++){ //如果需求量d比库存量大的话,出售所有月饼 if(co+mooncakes.get(i).count<=d){ co=co+mooncakes.get(i).count; sum=sum+mooncakes.get(i).price;//价位从高到低的月饼收益累加 }else if (co<d){//如果需求量比库存量小的话,应当从高价月饼开始出售 sum=sum+mooncakes.get(i).unit*(d-co); break; } } System.out.println(df.format(sum)); } }