改进版:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main{
private static class Mooncake implements Comparable<Mooncake>{
double amount;
double price;
double each_price;
public Mooncake(double amount,double price,double each_price){
this.amount=amount;
this.price=price;
this.each_price=each_price;
}
@Override
public int compareTo(Mooncake o){
return o.each_price>this.each_price?1:-1;
}
}
public static void main(String[]args) throws IOException {
BufferedReader input=new BufferedReader(new InputStreamReader(System.in));
String s[]=input.readLine().split(" ");
int n=Integer.valueOf(s[0]);
double total_amount=Double.valueOf(s[1]);
ArrayList<Mooncake> list=new ArrayList<>();
String s1[]=input.readLine().split(" "),s2[]=input.readLine().split(" ");
for(int i=0;i<n;i++){
double amount=Double.valueOf(s1[i]);
double price=Double.valueOf(s2[i]);
double value=price/amount;
Mooncake mooncake=new Mooncake(amount,price,value);
list.add(mooncake);
}
Collections.sort(list);
double profit=0;
for(int i=0;i<n;i++){
if(total_amount>=list.get(i).amount){
profit+=list.get(i).price;
total_amount-=list.get(i).amount;
}else{
profit+=list.get(i).each_price*total_amount;
break;
}
}
System.out.printf("%.2f",profit);
}
}
主要注意compareTo只能返回int型,所以不能直接返回o.each_price-this.each_price
原版(不知道为什么扣两分)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main{
private static class Mooncake implements Comparable<Mooncake>{
double amount;
double price;
double each_price;
public Mooncake(double amount,double price,double each_price){
this.amount=amount;
this.price=price;
this.each_price=each_price;
}
@Override
public int compareTo(Mooncake o){
return o.each_price>this.each_price?1:-1;
}
}
public static void main(String[]args) throws IOException {
BufferedReader input=new BufferedReader(new InputStreamReader(System.in));
String s[]=input.readLine().split(" ");
int n=Integer.valueOf(s[0]);
double total_amount=Double.valueOf(s[1]);
ArrayList<Mooncake> list=new ArrayList<>();
String s1[]=input.readLine().split(" "),s2[]=input.readLine().split(" ");
for(int i=0;i<n;i++){
double amount=Double.valueOf(s1[i]);
double price=Double.valueOf(s2[i]);
double value=price/amount;
Mooncake mooncake=new Mooncake(amount,price,value);
list.add(mooncake);
}
Collections.sort(list);
double profit=0;
for(int i=0;i<n;i++){
if(total_amount>=list.get(i).amount){
profit+=list.get(i).price;
total_amount-=list.get(i).amount;
}else{
profit+=list.get(i).each_price*total_amount;
System.out.printf("%.2f",profit);
return;
}
}
}
}