牛客小白月赛82

您所在的位置:网站首页 oppo80元折扣券 牛客小白月赛82

牛客小白月赛82

2024-07-08 11:45:33| 来源: 网络整理| 查看: 265

目录

D题 Kevin逛超市

题目描述

输入描述:

输出描述:

输入

输出

说明

思路:

代码:

 

D题 Kevin逛超市 题目描述

Take that money, and watch it burn\sf Take\ that\ money,\ and\ watch\ it\ burnTake that money, and watch it burn

Sink in the river, the lessons I’ve learned\sf Sink\ in\ the\ river,\ the\ lessons\ I’ve\ learnedSink in the river, the lessons I’ve learned

       —— Counting Stars, OneRepublicCounting\ Stars,\ \text{OneRepublic}Counting Stars, OneRepublic

两个版本唯一的不同是:简单版本中折扣券和立减券的数量均为 111,困难版本中折扣券和立减券的数量为给定值。

氧气少年在逛超市。 他总共买了 nnn 件商品,第 iii 种商品的价格为 pip_ipi​。 超市有下面的打折政策:

 每名顾客有 aaa 张折扣券,可以让一件商品的价格打折(如果此商品原价为 pip_ipi​,那么使用此优惠券后,价格变为 pi×x%p_i\times x\%pi​×x%)。 每名顾客有 bbb 张立减券,可以让一件商品的价格减小 yyy(如果此商品原价小于 yyy,那么可以花费 000 买下)。 每个商品最多使用 111 张优惠券。

请求出氧气少年可能付出的最小的花费。

输入描述: 第一行包含一个整数 T(1≤T≤10^5),表示测试用例的组数。 对于每组测试用例: 第一行包含五个整数 (1≤n≤2⋅10^5),(0≤a,b≤n),(1≤x≤99),(1≤y≤10^4) 第二行包含 n 个整数 p1…pn ,表示商品的价格。 保证对于所有的测试用例,nnn 的总和不超过 2⋅10^5 输出描述: 对于每组测试用例: 仅输出一行,包含一个实数,表示答案。如果你的答案和标准答案的绝对误差或相对误差不超过 10−410^{-4}10−4,则你的答案会被视为正确。

示例1

输入 6 3 2 1 50 50 100 100 50 3 3 1 50 200 100 100 45 3 2 2 36 3 5 8 1 3 3 3 99 500 100 600 1000 3 3 3 1 1 100 600 1000 3 0 0 1 1 100 600 1000 输出 100.000000000000 72.500000000000 4.680000000000 600.000000000000 17.000000000000 1700.000000000000 说明 对于第一组样例数据: 可以对编号为 1,21,21,2 的商品使用折扣券,对编号为 333 的商品使用立减券。 对于第二组样例数据: 可以对编号为 1,31,31,3 的商品使用折扣券,对编号为 222 的商品使用立减券。 思路:

这道题就是一个简单的贪心,因为对于商品使用优惠券只有两种情况,要么使用折扣卷,要么使用立减卷,并且对于折扣卷来说,如果他的价值越高,折扣越多,所以优先对于价值高的物品使用折扣卷,然后对于立减卷来说,如果这个物品价值都高于他,那么他的作用是等同的,如果这个物品价值低于他,越高的物品价值,省去的钱越多。

所以通过这里分析可知,我们应该对价格高的(a+b)个物品使用优惠券,枚举这a+b个商品,不管优惠券数量,每个商品选择最优的优惠券使用,如果某个优惠券数量用多了(不妨设是x类型用多了),则考虑把一部分使用x类型的商品改为使用y类型,怎么改呢,这里又是一个贪心,把所有使用x类型优惠券的商品按“使用y的优惠减去使用x的优惠”排序,相当于如果算出改变这些商品使用的优惠券类型,带来的增量是多少,然后优先选择增量小的就行,直到优惠券数量平衡。

代码: import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.StreamTokenizer; import java.util.Arrays; import java.util.Scanner; /** * @ProjectName: study3 * @FileName: Ex34 * @author:HWJ * @Data: 2023/12/2 9:43 */ public class Main { public static void main(String[] args) throws IOException { StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in))); in.nextToken(); int t = (int)in.nval; for (int o = 0; o < t; o++) { in.nextToken(); int n = (int) in.nval; in.nextToken(); int a = (int) in.nval; in.nextToken(); int b = (int) in.nval; in.nextToken(); double x = (int) in.nval /100.0; in.nextToken(); int y = (int) in.nval; double[][] arr = new double[n][3]; double total = 0; for (int i = 0; i < n; i++) { in.nextToken(); arr[i][0] = (int) in.nval; arr[i][1] = arr[i][0] * (1 - x); arr[i][2] = Math.min(arr[i][0], y); total+=arr[i][0]; } int cntA = 0; int cntB = 0; Arrays.sort(arr, ((o1, o2) -> { return (int) (o2[0] - o1[0]); })); double[] df = new double[Math.min(a + b, n)]; int p = 0; for (int i = 0; i < Math.min(a + b, n); i++) { if (arr[i][1] > arr[i][2]){ total -= arr[i][1]; cntA++; }else { total -= arr[i][2]; cntB++; } df[p++] = arr[i][1] - arr[i][2]; } Arrays.sort(df); if (cntA 0) continue; total -= df[i]; k--; if (k == 0) break; } System.out.println(total); } } } }



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭