题目:经此一役小红所向无敌
链接:https://ac.nowcoder.com/acm/contest/11214/A
来源:牛客网
题目描述
经过重重困难,对立和光终于来到魔王城,和最终的大魔王——小红进行决战。
已知小红的血量是 10^999999999
对立的攻击力是 a ,血量是 h。
光的攻击力是 b ,血量是 k 。
每回合光先对小红发起攻击,然后对立对小红发起攻击,然后小红展开幻术,令光和对立同时互相攻击。
每次攻击后,受击者的血量会减掉攻击者的攻击力。
当光和对立其中一人死亡后,另一人会悲痛欲绝,对小红发出自己攻击力*10的伤害的大招,然后自杀。(若两人同时死亡,则两人都无法发出大招)
小红想知道,弱小的光和对立,她们能对自己造成多少点伤害?
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
输入描述
- 一行 4 个正整数 a , h , b , k ,用空格隔开。
- 1≤a,b,h,k≤10^9
输出描述
一个正整数,代表小红受到的伤害。
示例
输入:
2 3 1 3
输出:
26
说明:
第一回合,小红受到了对立和光的攻击,并让她们互相攻击。第一回合结束时,小红共受到3点伤害。这时对立血量为2,光的血量为1。
第二回合,小红受到了对立和光的攻击,并让她们互相攻击。这时对立血量为1,光的血量为0死亡。对立放出大招后自杀。本回合小红共受到23点伤害。
小红受到的总伤害为:3+23=26。
分析
先判断进行了多少回合的攻击才出现对立或光的死亡,然后判断是同时死还是某个先死,就可以得到:
总伤害=回合数*(对立攻击+光攻击)+(没死的攻击力*10或0)
代码(Java实现)
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
long a = 0L;//对立攻击力
long h = 0L;//对立血量
long b = 0L;//光攻击力
long k = 0L;//光血量
long damage = 0L;//伤害
long[] arr = new long[4];
for (int i=0;i<4;i++){
arr[i] = in.nextInt();
}
a = arr[0];
h = arr[1];
b = arr[2];
k = arr[3];
//判断回合数
long num1 = k/a;
long num2 = h/b;
//如果还有剩余血量则多加一回合
if (k%a != 0)
num1++;
if (h%b != 0)
num2++;
long count = Math.min(num1,num2 );
damage += count * (a+b);
if (num1 != num2) {
damage += num1 > num2 ? b*10 : a*10;
}
System.out.println(damage);
}
}