题目描述

血魔遇到了N个敌人。初始血魔生命值为M,每秒钟血魔的生命值会减少1。如果血魔的生命值变为0,血魔会立刻消失,但在此之前他可以击杀敌人来恢复生命值。对于第i个敌人需要攻击Ti次才能杀死,血魔每秒钟可以攻击一次,每秒钟血魔可以攻击任意一个敌人,并且每次攻击可以同时击中任意多个敌人。敌人一共有K种类型,对于每种类型的敌人,血魔最多只能杀死一个。血魔在进行过所有攻击后,他可以立刻恢复他所杀死敌人的最小生命值,在恢复过后不能再继续进行攻击(如果血魔生命值变为0的瞬间恢复生命值,血魔不会死亡)。现在血魔想知道,他是否能杀死K个敌人,如果能的话,那么杀死K个敌人后,生命值最高能为多少?

输入

第一行3个整数N,M,K,分别表示敌人数量,血魔初始的生命值,敌人类型数。

接下来N行,每行三个整数Hi,Ti,Ci,分别表示第i个敌人的生命值,需要攻击的次数和类型。

1 <= Ci <= K <= N <= 1 0 5 10^5 105

1 <= Hi,Ti,M <= 1 0 9 10^9 109
保证每种类型的敌人至少有一个。

输出

如果不能杀死K个敌人输出-1,否则输出生命值最大值。

样例

样例输入 样例输出
2 5 2
1 2 2
4 5 1
1
5 4 2
4 2 1
1 1 1
4 1 1
3 2 2
1 1 2
5
3 5 3
5 2 1
1 6 2
3 2 3
-1

解题思路

这道题目要求判断游戏结果,可以通过模拟游戏的过程来求解。
由于血魔的初始生命值为整数,因此可以使用一个整数类型来描述血魔的生命值,可以选择使用一个二维数组来储存敌人的状态,用N表示敌人的数量,用M表示血魔的初始生命值,用K表示敌人的类型数。因为要判断是否每一种类型的敌人是否都杀死一个,使用一个一维vector来储存被杀死的类型。用一个vector储存已经杀死的一个类型的敌人的最小生命值。每次每个敌人需要攻击的次数减一,血魔的生命值减一。直到血魔的血量为0或者敌人死亡数量和敌人数量相等。

具体解法:

首先输入敌人数量,血魔初始的生命值,敌人类型数。再输入敌人的生命值,需要攻击的次数和类型。

利用循环来解决问题,数据的基本操作为生命值的衰减和敌人需要攻击次数的减少。每一次循环血魔的生命值减少一,敌人需要攻击的次数也减少一次,如果需要的次数为0,则击杀的敌人数量+1,判断敌人的类型是否在已经存在的类型之中,如果不存在就添加到已经杀死的敌人的类型之中。
之后将敌人的生命值如已经存在的生命值进行比较,如果当前敌人的生命值大于已经存在的当前类型的生命值,则使用最大的生命值进行替换。

游戏结束的条件为:血魔的生命值为0、所有敌人都已经被杀死。

判断游戏的结局:

  • 所有种类的敌人都至少杀死了一个,将已经杀敌的类型的最大生命值排序,取出最小的与当前血魔的生命值相加,输出最大的生命值。
  • 存在有种类的敌人没有杀死至少一个,输出-1.

代码实现

#include <iostream>
#include<vector>
using namespace std;
#include <algorithm>
// int xuemo[3];
int main()
{int N;//敌人数量int M;//血魔初始生命值int K;//敌人类型数int diedsum = 0;cin >> N >> M >> K;vector<vector<int>> Ni(N, vector<int>(3));vector<int> killedtyoe;//已经杀死的类型vector<int> killedblood(K);//已经杀死的敌人的生命值for (int i = 0; i < N; i++){cin >> Ni[i][0] >> Ni[i][1] >> Ni[i][2];}while (M){// 将每个血魔的攻击的次数减一for (int i = 0; i < N; i++){Ni[i][1] = Ni[i][1] - 1;if (Ni[i][1] == 0){diedsum++;if (count(killedtyoe.begin(), killedtyoe.end(), Ni[i][2]) == 0){killedtyoe.push_back(Ni[i][2]);}if (killedblood[Ni[i][2]-1] < Ni[i][0]){killedblood[Ni[i][2]-1] = Ni[i][0];}}}M--;if (diedsum == N){break;}}if (killedtyoe.size() == K){sort(killedblood.begin(), killedblood.end());int blood = M + killedblood[0];cout << blood;}else{cout << -1;}}

运行结果



2021安徽省大学生程序设计竞赛正式赛:D 持续攻击相关推荐

  1. 【超好懂的比赛题解】“山大地纬杯”第十二届山东省ICPC大学生程序设计竞赛(正式赛)

    title : "山大地纬杯"第十二届山东省ICPC大学生程序设计竞赛(正式赛) date : 2022-5-30 tags : ACM,题解,练习记录 author : Linn ...

  2. 第三届全国中医药院校大学生程序设计竞赛 (正式赛)

    目录 Problem B. 绿地装饰(暴力模拟+思维) E 解密(水+有点巧妙的解法) F: 巍巍岳麓(类似最小生成树) H: 百舸争流(贪心) Problem B. 绿地装饰(暴力模拟+思维) 时间 ...

  3. 湖南中医药大学信息科学与工程学院第四届大学生程序设计竞赛——正式赛题解

    目录 问题A:X星人的统计 问题B:X星人的报数 问题C:X星人的迷宫 问题D:X星人的高考 问题E:X星人的匹配 问题F:X星人的成绩 问题G:X星人的变换 问题H:X星人的游戏 问题I:X星人的宝 ...

  4. 2020年湖南中医药大学“华为杯”大学生程序设计竞赛——正式赛(赛后补题)

    目录 A-幸福小组 B-菜鸡驿站 C-TC的火柴 D-n盏灯 E-电子手表 F- TC的steam账号 G- 万圣节 H-最少颜色 I-2048 J-解密 K-TC的门牌号 L-粗心的小明 M-小明的 ...

  5. “师创杯”山东理工大学第九届ACM程序设计竞赛 正式赛 F.校赛~校赛~【思维+规律题】

    校赛~校赛~ Time Limit: 1000MS  Memory Limit: 65536KB Submit  Statistic Problem Description SDUT 的校赛是从 20 ...

  6. 2021中国大学生程序设计竞赛(CCPC),烤仔与你不见不散!

    今天也是见到超多学霸的一天呢! 因为,CCPC 的参赛选手们来看烤仔啦!北京航空航天大学.北京交通大学等高校共 95 名总决赛参赛选手在 5 月 28 日来到 Conflux 参观.交流. 由中国大学 ...

  7. 2021辽宁省大学生程序设计竞赛题解

    比赛链接 A.无敌的强太郎 不会,后面看看能不能补 B.阿强的路 不会,后面看看能不能补 C.传染病统计(模拟+签到) 思路 考虑到数据范围很小,所以怎么搞都能过,直接枚举每一个人当作病毒源,然后找到 ...

  8. 2021中国大学生程序设计竞赛部分题解(CCPC)- 网络选拔赛(重赛)

    文章目录 一.1002 Kanade Doesn't Want to Learn CG 二.1004 Primality Test 三.1005 Monopoly 四.1006 Nun Heh Heh ...

  9. 2021中国大学生程序设计竞赛(CCPC)- 网络选拔赛(重赛) Jumping Monkey(并查集,逆向考虑)

    LINK 考虑权值最大的节点为 z z z,那么其他所有点最后都是跳到这个点,且不能越过这个点到其他点 那么其实我们可以把所有其他节点的答案都加 1 1 1,相当于把 z z z删掉,分成若干个连通块 ...

最新文章

  1. Vue实例的生命周期
  2. Android 请求PHP接口, 返回json, 开头有问号, 解决方案
  3. 数单词 (AC自动机模板题)
  4. 精确通知,顺序访问——Lock锁比synchronized锁的优势之处
  5. 洲际的merlin怎么用_天问一号是怎么拍摄地月合影的?
  6. Dart 异步编程之 Isolate 和事件循环
  7. 踩坑之旅:springboot+vue+webpack项目实战(一)
  8. PD生成SQL脚本附带注释命令
  9. office自定义安装选项_如何自定义Office 2013中功能区上的现有选项卡
  10. C++ static静态成员函数
  11. django 1.8 官方文档翻译: 3-2-1 内建的视图
  12. [luogu2414 NOI2011]阿狸的打字机 (AC自动机)
  13. 01.使用File类读写文件
  14. Spatial Pyramid 小结
  15. 工业相机软件参数介绍
  16. 【PotPlayer】采集Switch图像及录制
  17. 联想IdeaPad Z460在Win10环境下BIOS刷白名单
  18. dreamweaver快捷键大全
  19. div获得/失去焦点
  20. H5实现一个简易本地视频播放器

热门文章

  1. ldap服务器配置信息错误,OpenLDAP配置错误ldap_bind:无效的凭据(49)
  2. 《天龙八部2》2.30.1607 人物与宝宝基址,是最新的
  3. 每日一小练(「各位数字之积」与「各位数字之和」的差)
  4. 一些写得好的Spring博客收集整理
  5. [Pandas] 统计计数value_counts( )
  6. 【3.分页展示】查询只有key没有值及其他问题
  7. 南京大学计算机科学与技术系公开课,讲座 南京大学计算机科学与技术系.ppt
  8. 推动全球发展倡议,与世界共享发展机遇
  9. 写一个关于女生节活动的竞标的通知
  10. 2022-03-06裁判文书网(分析)数据更新