博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
长春理工大学第十四届程序设计竞赛(重现赛)I.Fate Grand Order
阅读量:5892 次
发布时间:2019-06-19

本文共 1127 字,大约阅读时间需要 3 分钟。

链接:

题意:

Fate Grand Order是型月社发行的角色扮演类手机游戏,是著名的氪金抽卡"垃圾"手游。

小t是该手游的忠实厨力玩家,为了抽到喜欢的角色他特地氪金买了n颗圣晶石(3颗圣晶石可以抽卡1次)。
已知有m个抽卡活动会按时间顺序在游戏中举办,每个活动都会新推出一个角色,并且告诉你这m个角色的抽取概率,而每当首次成功抽到每个角色之后他会获得一定的开心值。
小t是一个有计划的男人,在第1个活动开始前他就会想好一个抽卡计划,抽卡计划决定哪些角色抽,哪些角色不抽;
小t也是一个贫穷的男人,对于每个选择抽卡的活动,他都只会抽一次,不管是否抽到都不会选择继续再在这个活动抽卡;
小t也是一个纠结的男人,每个角色他都很纠结是否要抽,总之他想让自己尽可能开心,所以小t求助于聪明的你,他想知道什么样的计划可以让开心值的期望最大。

思路:

根据概率和开心值的乘积排序。

取前n/3个。

代码:

#include 
using namespace std; const int MAXN = 2e3+10; struct Node{ double p; double happy; int pos; bool operator < (const Node& that) const { return this->p*this->happy > that.p*that.happy; }}node[MAXN]; int Vis[MAXN]; int main(){ int n, m; cin >> n >> m; n = n/3; for (int i = 1;i <= m;i++) cin >> node[i].p, node[i].pos = i; for (int i = 1;i <= m;i++) cin >> node[i].happy; sort(node+1, node+1+m); for (int i = 1;i <= n;i++) Vis[node[i].pos] = 1; for (int i = 1;i <= m;i++) if (Vis[i] == 0) cout << 0; else cout << 1; cout << endl; return 0;}

  

转载于:https://www.cnblogs.com/YDDDD/p/10992197.html

你可能感兴趣的文章
JavaFX 学习笔记——窗口与控件
查看>>
吐槽Javascript系列一:slice()、substr()和 substring()
查看>>
原型链的理解
查看>>
flac转换mp3格式使用什么软件好
查看>>
区块链分支循环
查看>>
DANet&CCNet
查看>>
Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
查看>>
JS每日一题:Vue中的diff算法?
查看>>
CNCF推出云原生网络功能(CNF)Testbed
查看>>
网络应用优化——时延与带宽
查看>>
spring-boot的access日志格式修改
查看>>
谈一谈javascript异步
查看>>
200. Number of Islands
查看>>
egg(15)--定时任务schedule
查看>>
初识React(9):dva简介
查看>>
从今天起开启对正则表达式的学习
查看>>
聊聊flink的TextOutputFormat
查看>>
DKhadoop安装包下载与监控参数说明
查看>>
2018 年最新的移动前端资料整理(不断更新)
查看>>
关于正则(照猫画虎)
查看>>