你要买n件物品,其中有一些是凳子。
商场正在举行促销活动,如果购物车中有至少一个凳子,那么你可以半价购买这个购物车中最贵的一个物品。
你有m辆购物车,请最小化你的花费。
输入描述:
第一行一个整数t表示数据组数 (1 ≤ t ≤ 100)。 每组数据第一行两个整数n,m (1 ≤ n,m ≤ 1000),接下来n行每行两个整数ai,bi,分别表示第i件物品的价格以及它是否是凳子 (1 ≤ ai ≤ 105, 0 ≤ bi ≤ 1)。
输出描述:
每组数据输出一行一个实数表示最小花费,保留一位小数。
示例1
输入
2 5 1 1 0 2 1 3 1 4 0 5 0 5 10 1 0 2 1 3 1 4 0 5 0
输出
12.5 10.5
粗糙的过了一下,应该还可以优化。
package com.example.demo.study.huawei;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.Collections;
import java.util.Scanner;
public class shoppingChair {
// static class chair{
// int price;
// int hasChair;
// public chair(int price,int hasChair){
// this.price=price;
// this.hasChair=hasChair;
// }
// }
public static void main(String args[]){
Scanner scanner=new Scanner(System.in);
int count=scanner.nextInt();
for(int i=0;i<count;i++ ){
int n=scanner.nextInt();
int m=scanner.nextInt();
int chairsCount=0;
scanner.nextLine();
Integer[] price=new Integer[n];
for (int j = 0; j <n ; j++) {
price[j]=scanner.nextInt();
if(scanner.nextInt()==1){
chairsCount++;
}
scanner.nextLine();
}
System.out.println(String.format("%.1f", minPay(price,m,chairsCount)));
}
scanner.close();
}
// static class priceCompartor implements Comparator<chair>{
// public int compare(chair c1,chair c2){
// return -(c1.price-c2.price);
// }
// }
public static BigDecimal minPay(Integer[] chairs, int m, int chairsCount){
if (chairs.length==0){
return new BigDecimal(0);
}
double pay=0;
int min =Math.min(m,chairsCount);
Arrays.sort(chairs, Collections.reverseOrder());
if(min>=chairs.length) {
for (int i = 0; i < chairs.length; i++) {
pay = pay + chairs[i] / 2.0;
}
}else{
for (int i = 0; i < min; i++) {
pay = pay + chairs[i]/ 2.0;
}
for (int i = min; i < chairs.length; i++) {
pay = pay + chairs[i] ;
}
}
BigDecimal result=new BigDecimal(pay);
result.setScale(1);
return result;
}
}