题目
小爱和小艾两人组队打一只怪兽。一开始怪兽有 点生命值,当 变成 或更低时,怪兽就被消灭了。他们两人是同时开始攻击的,小爱每分钟可以攻击 aa 下,小艾每分钟可以攻击 下。若 ,,则小爱发出攻击的时刻为
小艾发出攻击的时刻为
攻击分两种类型,普通攻击每次对怪兽造成 点伤害。若在某时刻,小爱和小艾恰好一同发出攻击,称为爆击
,爆击
将对怪兽造成成倍的伤害,共计 点伤害。
一旦攻击开始,就不会中断,直到怪兽被消灭为止,请问,对怪兽造成最后一点伤害的是哪一位玩家?如果最后一击是两人同时造成的,输出 C
(Combo的意思)。
输入格式
第一行:一个正整数表示 。
第二行:两个正整数表示 与 。
输出格式
- 若是小爱发出了最后一击,输出
A
; - 若是小艾发出了最后一击,输出
B
; - 若是两人的
爆击
为最后一击,输出C
。
限制:
算法分析
- 把每分钟分成 份,这样是为了让他们攻击的点都在整数上
那么小爱攻击 下,则攻击间隔是 时间
小艾攻击 下,则攻击间隔是 时间
暴击的性质:一定是 的倍数,也一定是 的倍数,公倍数
公倍数为最小公倍数的倍数
所以暴击点就是 的倍数
- 是一个循环,可以计算出攻击的伤害,用生命值 伤害,最后看剩下的生命。
代码实现
#include <bits/stdc++.h> #define rep(i, n) for (int i = 0; i < (n); ++i) using namespace std; int main() { int n, a, b; cin >> n >> a >> b; int l = lcm(a, b); int dm = l/b + l/a + 2; n %= dm; if (n == 0 or n == dm-1 or n == dm-2 or n == dm-3) { puts("C"); return 0; } int nowa = b; // a 第一次攻击在 b 时刻 int nowb = a; // b 第一次攻击在 a 时刻 for (int i = 1; i <= n; ++i) { if (nowa < nowb) { if (i == n) { puts("A"); } nowa += b; } else { if (i == n) { puts("B"); } nowb += a; } } return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!