[陕师大校赛] A 正正的毒奶粉
题目
前言: 没有传送门, 由于出题人的题解有问题, 所以当时的题的数据也可能有问题, 也就是说他们可能还欠我一个气球 -_-
描述
“啊…苍穹幕落…怎么又不能用啊…”
正正最近沉迷于毒(D)奶(N)粉(F)不能自拔, 每天熬夜刷装备已经让正正有了双大大的黑眼圈, 但是正正是一个菜鸡, 他甚至搞不清自己的战斗力是怎么计算的, 为了清楚的知道自己的战斗力, 他特地的请教大佬得知:
每件装备战斗力===(1+白字属性值)*(1+黄字属性值)*装备基础分
总战斗力=== ∑\sum∑每件装备战斗力
现在有nnn件装备, 但是只能从其中选mmm件, 在你选择的mmm件装备中, 白字属性值每件装备都可以生效, 黄字属性值只有一件装备可以生效, 现在让你帮帮正正, 怎么样选才能让正正战斗力最高
输入
第一行有两个数nnn, mmm(1≤m≤n≤100001 \leq m \leq n \leq 100001≤m≤n≤10000)表示装备的总数和正正可以选择的装备数.
之后每行有3个数, vvv, ppp, qqq(0≤v≤10000,0≤p,q≤50 \leq v \leq 10000, 0 \leq p, q \leq 50≤v≤10000,0≤p,q≤5)分别表示每件装备的基础分, 白字属性值, 黄字属性值
输出
一个数表示最终的战斗力, 答案保留2位小数
样例输入
5 2
100 0.3 0.1
80 0.5 0.2
200 0.2 0.4
100 0.4 0.3
50 0.3 0.6
样例输出
476.00
解决
分析
仔细查看公式与题目描述, 白字属性值是每件装备都可以生效的, 所以在每件装备的战斗力中可以直接使用 (1+白字)*装备基础分, 而对于唯一一件生效的黄字, 可以写成 (1+白字)*装备基础分 + (1+白字)*黄字*装备基础分 , 当所有的装备加起来的时候, 也就是看哪一件装备的黄字生效时附加战斗力最高, 即 (1+白字)*黄字*装备基础分 这一部分最大
设计
创建一个结构体, 两个属性, 基础战斗力 (1+白字)*装备基础分, 加成比率 黄字, 然后按照基础战斗力从大到小进行排序, 由于加成值最大的装备, 可能初始基础战斗力低, 还不如选择一个高基础战斗力的装备, 之后随便一件装备加成一下都比选择加成值最大的战斗力强.
所以分成两种情况, 第一种情况, 基础战斗力优先, 从排序后的装备里, 取出前m个装备, 在他们中找出加成最大的, 使它的黄字生效, 得到一个战斗力; 第二种情况, 加成值优先, 从排序后的装备里, 取出前m-1个装备, 他们的基础战斗力是最高的, 然后在剩余的所有的装备中计算加成值和基础战斗力组合最高的, 将那个装备的黄字生效并且将其战斗力加上去.(如果是在所有装备中计算加成值最高的, 如果在前m-1个里面, 那么为了最大提升战斗力, 必然选择第m件装备, 就与第一种情况相同了), 然后输出两个中最大的战斗力即可
编码
#include <bits/stdc++.h>
using namespace std;
#define MAX 10005struct Zhuang_bei {float ji_chu_zhan_dou_li;float jia_cheng;
};bool zhuang_bei_compare(const Zhuang_bei & z1, const Zhuang_bei & z2) {return z1.ji_chu_zhan_dou_li > z2.ji_chu_zhan_dou_li;
}Zhuang_bei zhuang_bei[MAX];int main(void) {int n, m;float v, p, q;int i, j, k;cin >> n >> m;for (i = 0; i < n; i++) {cin >> v >> p >> q;zhuang_bei[i].ji_chu_zhan_dou_li = v * (1 + p);zhuang_bei[i].jia_cheng = q;}sort(zhuang_bei, zhuang_bei + n, zhuang_bei_compare);// 1. 基础战斗力优先float max1 = 0, zui_da_jia_cheng = 0;for (i = 0; i < m; i++) {max1 += zhuang_bei[i].ji_chu_zhan_dou_li;zui_da_jia_cheng = max(zui_da_jia_cheng, zhuang_bei[i].ji_chu_zhan_dou_li * zhuang_bei[i].jia_cheng);}max1 += zui_da_jia_cheng;// 2. 加成值优先float max2 = 0;zui_da_jia_cheng = 0;for (i = 0; i < m - 1; i++) {max2 += zhuang_bei[i].ji_chu_zhan_dou_li;}for (i = m - 1; i < n; i++) {zui_da_jia_cheng = max(zui_da_jia_cheng, zhuang_bei[i].ji_chu_zhan_dou_li * (1 + zhuang_bei[i].jia_cheng));}max2 += zui_da_jia_cheng;printf("%.2f\n", max1 > max2 ? max1 : max2);
}
结果
未知…
总结
学习如何简化问题
[陕师大校赛] A 正正的毒奶粉相关推荐
- 21-5-22校赛G 自行车调度
21-5-22校赛G 自行车调度 n个点,m条边的无向带正权图(编号1到n).每个点初始有a[i](0<=a[i]<=1e5,1<=i<=n)辆自行车,自行车管理员可以花费一个 ...
- 2019xupt-acm校赛 题解(C.给你一个666)by出题组tongtong
重现赛链接 2019 ACM ICPC Xi'an University of Posts & Telecommunications School Contest 前面的话 有幸参与2019X ...
- 【电赛】电设校赛常用电路整理
电设校赛常用电路整理 写在前面 引用与致谢 单电源供电集成运放 电压比较器 单限比较器 过零比较器 改进:限制幅度和设置偏置 滞回比较器 窗口比较器 波形发生与变换 正弦波 RC正弦振荡电路 LC正弦 ...
- 第11届蓝桥杯本科组校赛(20200321)
1.问题描述 1200000有多少个约数(只计算正约数). 答案提交 这是一道结果填空的题,你只需要算出结果后提交即可.本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分. # ...
- 大连海事大学ACM校赛题解
大连海事大学ACM校赛题解 感谢xzx对题目的排版~ 作为出题人之一,我先简单说一下我认为的题目难度. 我觉着第一档比较容易的签到题是L.J.M,L就是向下取整的签到:J是简单思维.构造题,到了6以后 ...
- 18年12月蓝桥杯校赛
前言 昨天下午参加了蓝桥杯校内选拔赛. 不谈别人,只谈自己,我觉得这次校赛的发挥还算正常,大概做出了5/8或4/5吧,剩下几道题没时间看了. 应该提高做题效率了- 第一题 Excel地址 Excel单 ...
- 第十三届NENUACM校赛正式赛总结
目录 A B C D E F G H I 这次比赛主要是心态稳定,一直坚持不懈地想把题A掉,运气好就好在有很多思维题,我出的题没有用到高级点的算法. 一个点在于自己潜心研究了一点组合数学,其实并没有比 ...
- 好久没撸c,第一场回状态的题(埃森哲杯第十六届上海大学程序设计联赛春季赛暨上海高校金马五校赛
题目链接: 埃森哲杯第十六届上海大学程序设计联赛春季赛暨上海高校金马五校赛 A:Wasserstein Distance ## 题意:有2大堆柱状图的土(总体积相同,问从第一堆土移动到第二堆消耗最少的 ...
- [置顶]2010年东北大学ACM程序设计竞赛冬季校赛题解
8题只做出4题比较easy的题,而且做得挺麻烦,看来还要多练练. AC的题如下 NEUOJ 1112 I Love Apple Description So many people love app ...
最新文章
- Oracle触发器简单使用记录
- 【报错笔记】maven项目启动时报错
- easyui树形菜单生成算法,及在关系型数据库中的存储方式(非递归,高效算法)
- Node.js 国产 MVC 框架 ThinkJS 开发 config 篇
- spring基础——外部引入属性文件创建bean
- 【记录】[2014.2.12]网新第一天
- 线性回归和广义线性回归
- LiveData源码解析
- hadoop api 复制文件_Hadoop核心架构是怎样的?
- 小学计算机学什么,小学信息技术课学什么
- vga焊接线顺序_VGA线的焊接方法,15线与7线分别如何焊接?
- python 画直方图
- python精通 epub_精通Python自然语言处理 pdf epub mobi txt 下载
- 路由器的原理及其配置(一)
- NOI Online #2入门组
- 局域网限速软件_复工复学活力加倍、办公类软件最低 6 折再来袭!
- 吐血整理:最受欢迎的250份学习资料,99%的DBA都收藏了!
- Linux 压缩文件与命令
- 小老虎的微信公众号:iITObserve
- Java Comparator使用指南 ---- 看这一篇就够了