最后一击

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

题目描述 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
using namespace std;
int n,a,b;
int ap=0;
int bp=0;

int main() {
    cin>>n>>b>>a;
    while (n>0){
        if (ap+abp+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
using namespace std;int n,a,b;int ap=0;int bp=0;int main() {cin>>n>>b>>a;while (n>0){if (ap+abp+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;}

你可能感兴趣的:(区赛市赛试题,算法)