Day4 T2 卡牌游戏
题目
小X为了展示自己高超的游戏技巧,在某一天兴致勃勃地找小Y玩起了一种卡牌游戏。每张卡牌有类型(攻击或防御)和力量值两个信息。小Y有n张卡牌,小X有m张卡牌。已知小X的卡牌全是攻击型的。
游戏的每一轮都由小X 进行操作,首先从自己手上选择一张没有使用过的卡牌X。如果小Y手上没有卡牌,受到的伤害为X的力量值,否则小X要从小Y的手上选择一张卡牌Y。若Y是攻击型(当X的力量值不小于Y的力量值时才可选择),此轮结束后Y 消失,小Y受到的伤害为X的力量值与Y 的力量值的差;若Y是防御型(当X的力量值大于Y的力量值时才可选择),此轮结束后Y消失,小Y不受到伤害。
小X可以随时结束自己的操作(卡牌不一定要用完)。希望聪明的你帮助他进行操作,使得小Y受到的总伤害最大。
PS:原题:CF321B Ciel and Duel
输入
输入的第一行包含两个整数n和m。
接下来n 行每行包含一个字符串和一个整数,分别表示小Y的一张卡牌的类型(“ATK”表示攻击型,“DEF”表示防御型)和力量值。
接下来m 行每行包含一个整数,表示小X的一张卡牌的力量值。
输出
输出一行包含一个整数,表示小Y受到的最大总伤害。
样例
输入 | 输出 |
---|---|
2 3 ATK 2000 DEF 1700 2500 2500 2500 |
3000 |
3 4 ATK 10 ATK 100 ATK 1000 1 11 101 1001 |
992 |
数据规模
各规模均有一半数据满足小Y 只有攻击型卡牌。
对于30%的数据,1≤n,m≤6。
对于60%的数据,1≤n,m≤\(10^3\)。
对于100%的数据,1≤n,m≤\(10^5\),力量值均为不超过\(10^6\)的非负整数。
题解
考虑两种策略:
1.不动对方的防御牌,直接用我方最大的牌攻击对方最小的攻击牌,直到打不动为止。
2.用大小最相近的牌将对方所有的牌消耗光,再用余下的牌造成满伤害。
我们很难以决策这两种策略哪一种更优,怎么办办?
——很简单,两种策略都使用一遍,取答案更优的。
#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
const int MAXN=100010;
int n,m,cntatk,cntdef;
int a[MAXN],atk[MAXN],def[MAXN];
bool book[MAXN]={false};
ull ans1=0,ans2=0;void solve1(){for(int i=1,j=m;a[j]>atk[i] && j>0 && i<=cntatk;i++,j--) ans1+=a[j]-atk[i];
}void solve2(){for(int i=1,j=1;i<=cntdef;i++){while((a[j]<=def[i] || book[j]) && j<=m) j++;if(j==m+1){ans2=0;//如果连对方的防御牌都打不完,这种策略的得分为0return;}book[j]=true;}for(int i=1,j=1;i<=cntatk;i++){while((a[j]<atk[i] || book[j]) && j<=m) j++;if(j==m+1) return;//如果打不完对方攻击牌,直接退出 ans2+=a[j]-atk[i];book[j]=true;}for(int i=1;i<=m;i++){if(!book[i]) ans2+=a[i];}
}int main(){scanf("%d %d",&n,&m);char ch[5];int t;for(int i=1;i<=n;++i){scanf("%s %d",ch,&t);if(ch[0]=='A') atk[++cntatk]=t;else def[++cntdef]=t;}for(int i=1;i<=m;i++) scanf("%d",&a[i]);sort(atk+1,atk+cntatk+1);sort(def+1,def+cntdef+1);sort(a+1,a+m+1);solve1();solve2();printf("%lld",max(ans1,ans2));return 0;
}
转载于:https://www.cnblogs.com/znk161223/p/11516672.html
Day4 T2 卡牌游戏相关推荐
- 【概率DP】$P2059$ 卡牌游戏
[概率DP]P2059 卡牌游戏 链接 题目描述 N个人坐成一圈玩游戏.一开始我们把所有玩家按顺时针从1到N编号.首先第一回合是玩家1作为庄家.每个回合庄家都会随机(即按相等的概率)从卡牌堆里选择一张 ...
- 天池 在线编程 卡牌游戏(01背包)
文章目录 1. 题目 2. 解题 1. 题目 你跟你的朋友在玩一个卡牌游戏,总共有 n 张牌. 每张牌的成本为 cost[i] 并且可以对对手造成 damage[i] 的伤害. 你总共有 totalM ...
- 动漫品牌“爆笑虫子”宣布与xNFT Protocol战略合作,开发NFT数字卡牌游戏
2021年4月23日,xNFT Protocol与动漫品牌"爆笑虫子"进行战略合作,推动"爆笑虫子"在卡牌游戏领域进行数字化转型.IP的数字(NFT)化是xNF ...
- CCF201612-5 卡牌游戏(募集解题代码)
试题编号: 201612-5 试题名称: 卡牌游戏 时间限制: 3.0s 内存限制: 256.0MB 问题描述: 问题描述 小Q和小M是游戏数值策划师,他们最近在测试自己新设计的卡牌对战游戏.游戏总共 ...
- 算法题 - 卡牌游戏问题 - Python
问题描述: 卡牌游戏问题 小a和小b玩一个游戏,有 n张卡牌,每张上面有两个正整数 x, y.取一张牌时,个人积分增加 x,团队积分增加 y.求小a,小b各取若干张牌,使得他们的 个人积分相等,且 ...
- java卡牌游戏详解
代码如下: package zxc;//文件夹名称 import java.awt.*; import java.awt.event.ActionEvent; import java.awt.even ...
- 基于QT开发的开源局域网联机UNO卡牌游戏报告(附github仓库地址)
源代码: https://github.com/yunwei37/UNO-game-oop 目录 1. 需求分析 1.1. UNO卡牌游戏的基本功能 1.2. UNO卡牌游戏的规则 2. 总体设计 3 ...
- 卡牌游戏战斗系统的设计和实现二
卡牌游戏战斗系统的设计和实现二 http://www.lxway.com/4418844614.htm 在一篇文章中,我更多的是从游戏理论的角度,讨论了战斗的系统的设计.这篇文章中,我将从程序的角度, ...
- 盛大搅局手游市场:引入日系卡牌游戏_0
腾讯科技讯(娄池)7月18日消息,盛大游戏宣布热门手游<百万亚瑟王>于今日开启国服公测,这款由日本知名游戏公司Square Enix(SE)研发,盛大游戏韩国子公司Actoz Soft负责 ...
最新文章
- android调用h5预加载图片,使用HTML5的页面资源预加载(Link prefetch)功能加速你的页面加载速度...
- 神策学堂“训练营+特训营”,种子学员招募中,来一起出圈呀!
- 3DSlicer6:编译、调试、规范化的开发
- HAL驱动库学习-ADC
- sqlalchemy外键和relationship查询
- WebFlux响应式编程基础之 4 reactive stream 响应式流
- android sudio提示快捷键冲突解决
- 共享主机与虚拟机文件方式一
- OSPF特殊区域之stub和totally stub配置(二)
- 手机上有没有学python的软件-盘点几个在手机上可以用来学习编程的软件
- [ZZ]HOW TO:使用 Visual Studio .NET 将 SQL Server 2000 存储过程添加到 Visual SourceSafe
- 关于内存地址和内存空间的理解。
- 前端----JavaScript
- excel处置4000行数据卡_Python自动获取当日所有股票数据
- java的JDBC简单案例
- 菜鸟学Linux 第041篇笔记 常见系统故障排除
- [闲聊篇]这个世界所谓的28定律
- 如何解决Win10应用商店代码:0x80131500错误
- 2022-2028全球铝制3D打印机行业调研及趋势分析报告
- 工业平板手持PDA的功能有哪些?
热门文章
- html 360浏览器输入框自动填充,关于360浏览器自动填充表单问题以及解决方案
- AD22如何添加一个元件的元件库(添加封装)(footprint is mising 问题)
- h5页面,关闭手机键盘
- [Matlab]切比雪夫Ⅰ型滤波器设计:低通、高通、带通和带阻(2)
- java实现将文件导出格式设为txt,并下载到桌面
- windows10 缺失 msvcp140.dll 解决办法
- ExtJS基础知识总结:常用控件使用方式(一)
- Swoft View 视图
- frozen ui php,手机版开发框架集合 Frozen UI WeUI SUI Mobile
- 窄带波束形成——频域的波束形成