最后一击

第二届上海市青少年算法竞赛(小学组)

题目描述 Description

小爱和小艾两人组队打一只怪兽。一开始怪兽有 n 点生命值,当 n 变成 0 或更低时,怪兽就被消灭了。他们两人是同时开始攻击的,小爱每分钟可以攻击 a 下,小艾每分钟可以攻击 b 下。若 a=2,b=4,则小爱发出攻击的时刻为
0.5, 1, 1.5, 2, 2.5, ⋯
小艾发出攻击的时刻为
0.25, 0.5, 0.75, 1, 1.25, 1.5, ⋯
攻击分两种类型,普通攻击每次对怪兽造成 1 点伤害。若在某时刻,小爱和小艾恰好一同发出攻击,称为爆击,爆击将对怪兽造成成倍的伤害,共计 (1+1)×2=4 点伤害。

一旦攻击开始,就不会中断,直到怪兽被消灭为止,请问,对怪兽造成最后一点伤害的是哪一位玩家?如果最后一击是两人同时造成的,输出 C(Combo的意思)。

输入描述 Input Description

第一行:一个正整数表示 n。
第二行:两个正整数表示 a 与 b。

输出描述 Output Description

1.若是小爱发出了最后一击,输出 A;
2.若是小艾发出了最后一击,输出 B;
3.若是两人的爆击为最后一击,输出 C。

样例输入 Sample Input

输入样例1: 40 3 5 ---------- 输入样例2: 33 3 5

样例输出 Sample Output

输出样例1: C ---------- 输出样例2: B

数据范围及提示 Data Size & Hint

数据范围提示:
对于 50% 的数据,1≤n≤100,1≤a,b≤10;
对于 100% 的数据,1≤n≤20000000,1≤a,b≤40000;

代码:

#include<iostream>
using namespace std;
int n,a,b;
int ap=0;
int bp=0;

int main() {
    cin>>n>>b>>a;
    while (n>0){
        if (ap+a<bp+b){
            ap+=a;
            n--;
        }else if(ap+a>bp+b){
            bp+=b;
            n--;
        }else {
            ap+=a;
            bp+=b;
            n-=4;
        }
        if(ap>1e9&&bp>1e9){
            ap-=1e9;
            bp-=1e9;
        }
    }
    if (ap>bp){
        cout<<"A";
    }else if (bp>ap){
        cout<<"B";
    }else{
        cout<<"C";
    }
    return 0;
}

没事干压缩一下:

#include<iostream>
using namespace std;int n,a,b;int ap=0;int bp=0;int main() {cin>>n>>b>>a;while (n>0){if (ap+a<bp+b){ap+=a;n--;}else if(ap+a>bp+b){bp+=b;n--;}else {ap+=a;bp+=b;n-=4;}if(ap>1e9&&bp>1e9){ap-=1e9;bp-=1e9;}}if (ap>bp){cout<<"A";}else if (bp>ap){cout<<"B";}else{cout<<"C";}return 0;}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值