☰
经此一役小红所向无敌【牛客tracker 每日一题】
2026/10/9 2:50:48 网站建设 项目流程

经此一役小红所向无敌

时间限制:1 秒
空间限制:256M

网页链接

牛客tracker

牛客tracker & 每日一题,完成每日打卡,即可获得牛币。获得相应数量的牛币,能在【牛币兑换中心】,换取相应奖品!助力每日有题做,丰盈牛币日益多!


题目描述

经过重重困难,对立和光终于来到魔王城,和最终的大魔王——小红进行决战。

每回合光先对小红发起攻击,然后对立对小红发起攻击,然后小红展开幻术,令光和对立同时互相攻击。

每次攻击后,受击者的血量会减掉攻击者的攻击力。

当光和对立其中一人死亡后,另一人会悲痛欲绝,对小红发出自己攻击力× 10 \times 10×10的伤害的大招,然后自杀。

(若两人同时死亡,则两人都无法发出大招)

小红想知道,弱小的光和对立,她们能对自己造成多少点伤害?


输入描述

一行4 44个正整数a , h , b , k a, h, b, ka,h,b,k,用空格隔开。

1 ≤ a , b , h , k ≤ 10 9 1 \le a, b, h, k \le 10^91≤a,b,h,k≤109


输出描述

一个正整数,代表小红受到的伤害。


示例 1

输入:

2 3 1 3

输出:

26

说明:第一回合,小红受到了对立和光的攻击,并让她们互相攻击。第一回合结束时,小红共受到3 33点伤害。这时对立血量为2 22,光的血量为1 11。

说明的后半段在截图中被页面截断,按题面规则推演完整过程如下:


数据范围与提示

解题思路

解题思路

本题是纯模拟 + 数学计算的简单题。小红血量视为无穷大,只需统计光和对立对小红造成的总伤害。每回合固定流程:光先攻击小红(伤害b bb),对立再攻击小红(伤害a aa),然后两人互相攻击(光掉a aa血,对立掉b bb血)。当其中一人死亡后,另一人会发出攻击力× 10 \times 10×10的大招并自杀。若同回合双双死亡,则无人放大招。

1. 问题等价转化
2. 算法实现
  1. 读入四个正整数a , h , b , k a, h, b, ka,h,b,k。
  2. 计算t a = ⌈ k / a ⌉ = ( k + a − 1 ) / a t_a = \lceil k/a \rceil = (k + a - 1) / ata​=⌈k/a⌉=(k+a−1)/a。
  3. 计算t h = ⌈ h / b ⌉ = ( h + b − 1 ) / b t_h = \lceil h/b \rceil = (h + b - 1) / bth​=⌈h/b⌉=(h+b−1)/b。
  4. 取t = min ⁡ ( t a , t h ) t = \min(t_a, t_h)t=min(ta​,th​)。
  5. 初始化总伤害ans = (a + b) * t。
  6. 若t a < t h t_a < t_hta​<th​,则ans += 10 * a;若t h < t a t_h < t_ath​<ta​,则ans += 10 * b。
  7. 输出ans。
3. 复杂度分析

总结

通过分析每回合的固定伤害和死亡所需回合数,直接计算出基础伤害,再根据谁先死亡判断是否额外受到大招伤害。逻辑清晰,计算简单,无需模拟每一回合。

代码内容

#include<bits/stdc++.h>usingnamespacestd;#defineendl'\n'typedeflonglongll;typedefunsignedlonglongull;typedefvector<vector<ll>>vvt;typedefpair<ll,ll>pll;constll N=1e3+10;constll INF=1e18;constll M=1e6+10;constll mod=1e9+7;ll a,h,b,k;intmain(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);cin>>a>>h>>b>>k;ll rd=min((h+b-1)/b,(k+a-1)/a);boolf1=(rd==(h+b-1)/b);boolf2=(rd==(k+a-1)/a);ll ans=0;ans+=(a+b)*rd;if(!f1)ans+=a*10;if(!f2)ans+=b*10;cout<<ans<<endl;return0;}

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询