链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
XPL 是一名老年大乱斗玩家。最近新赛季推出了一件能够让英雄无限叠加生命值的新装备------心之钢\textbf{心之钢}心之钢。对于变大变肉有着谜之执念的 XPLXPLXPL 当然义无反顾地加入了钢门。
这天,XPLXPLXPL 兴奋地对室友说自己刚玩了一把''爽局'',室友好奇 XPLXPLXPL 的英雄最终拥有多少生命值,粗心的 XPLXPLXPL 却说他已经忘了。好在室友从他的游戏文件中找到了那一局的对局日志、英雄的初始生命值 H1H_1H1 和成长生命值 H2H_2H2,所以我们可以借助这些信息计算出 XPLXPLXPL 那一局最终的生命值,但是室友太菜了,所以向你寻求帮助,你可以告诉他答案吗?
一篇对局日志包含了 mmm 个事件,且保证只会出现以下三种事件:
- mm:ss 1\textbf{mm:ss 1}mm:ss 1,表示英雄在 mmmmmm 分 ssssss 秒购买了心之钢,同时获得了心之钢的属性与被动技能。
- 获得 800800800 生命值。
- 被动-庞然吞食:对敌方英雄的攻击会造成 125+6%125+6\%125+6% 施法者当前生命值的伤害,并为你提供相当于10%该伤害(向下取整)的生命值。该技能有30秒冷却时间,且对于每个敌方英雄的冷却时间相互独立。举个例子,你于 000000 分 010101 秒对敌方英雄 xxx 触发了心之钢,这个效果便在 000000 分 020202 秒 --- 000000 分 303030 秒对于敌方英雄 xxx 处于冷却时间,同时不影响你对其余敌方英雄触发心之钢,直到 000000 分 313131 秒可再次对 xxx 触发。
- mm:ss 2\textbf{mm:ss 2}mm:ss 2,表示英雄在 mmmmmm 分 ssssss 秒升了一级,同时获得了固定的成长生命值 H2H_2H2。举个例子,若英雄的当前生命值为 114511451145 点,成长生命值为 141414 点,升级后的生命值就是 1145+14=11591145 + 14 = 11591145+14=1159 点 。
- mm:ss 3 x\textbf{mm:ss 3 x}mm:ss 3 x,表示英雄在 mmmmmm 分 ssssss 秒攻击了第 xxx 个敌方英雄。保证只存在5个敌方英雄,即 1≤x≤51\le x\le 51≤x≤5。
输入描述:
第一行输入三个整数 H1 (500≤H1≤1000)H_1\ (500\le H_1\le 1000)H1 (500≤H1≤1000) --- 初始生命值,H2 (1≤H2≤100)H_2\ (1\le H_2\le 100)H2 (1≤H2≤100) --- 成长生命值,m (0≤m≤1000)m\ (0\le m\le 1000)m (0≤m≤1000) --- 事件的个数。 接下来 mmm 行,第 iii 行输入一个字符串 mm:ss (00:00≤mm:ss≤60:00)mm:ss\ (00:00\le mm:ss\le 60:00)mm:ss (00:00≤mm:ss≤60:00) --- 时间线(保证分钟和秒钟都以两位整数的形式给出),一个整数 type (1≤type≤3)type\ (1\le type\le 3)type (1≤type≤3) --- 事件类型,若 type = 3type\ =\ 3type = 3 则再输入一个整数 x (1≤x≤5)x\ (1\le x\le 5)x (1≤x≤5) --- 敌方英雄编号。 输入保证事件1只会出现至多一次,事件按时间顺序给出,且每秒只会发生一个事件。\textbf{输入保证事件1只会出现至多一次,事件按时间顺序给出,且每秒只会发生一个事件。}输入保证事件1只会出现至多一次,事件按时间顺序给出,且每秒只会发生一个事件。
输出描述:
输出一个整数,表示对局最终英雄的生命值。
样例输入1
500 10 3
11:45 2
14:19 2
19:18 3 1
输出1
520
样例输入2
1000 100 7
00:00 2
00:30 3 1
01:00 1
01:30 2
01:40 3 1
01:45 3 2
01:50 3 1
样例输出2
2048
这道题正常写的话思路很顺的,而且也比较容易写出来,但是在判断的时候是有一个坑的。就是刚买完装备第一次使用的时候是没有冷却的可以直接使用。所以只要特判一下是不是第一次就OK了
/**
* ┏┓ ┏┓+ +
* ┏┛┻━━━┛┻┓ + +
* ┃ ┃
* ┃ ━ ┃ ++ + + +
* ████━████+
* ◥██◤ ◥██◤ +
* ┃ ┻ ┃
* ┃ ┃ + +
* ┗━┓ ┏━┛
* ┃ ┃ + + + +Code is far away from
* ┃ ┃ + bug with the animal protecting
* ┃ ┗━━━┓ 神兽保佑,代码无bug
* ┃ ┣┓
* ┃ ┏┛
* ┗┓┓┏━┳┓┏┛ + + + +
* ┃┫┫ ┃┫┫
* ┗┻┛ ┗┻┛+ + + +
*/
#include<iostream>
using namespace std;
int a[6];
int b[6];
int main() {
int pl = 0;
long long x, y, z;
cin >> x >> y >> z;
while (z--) {
int d, e;
scanf("%d:%d", &d, &e);
int t;
cin >> t;
if (t == 1) {
x += 800;
pl = 1;
} else if (t == 2) {
x += y;
} else if (t == 3 && pl == 0) {
int l;
cin >> l;
} else if (t == 3 && pl == 1) {
int l;
cin >> l;
if (((d - a[l]) * 60 + (e - b[l]) >= 30) || (a[l] == 0 && b[l] == 0)) {
a[l] = d;
b[l] = e;
x = x + (125 + 0.06 * x) * 0.1;
}
}
}
cout << x;
}