PTA 真能秒我?

由于特殊原因以下题面做加密处理,懂得都懂。

混元形异太极门掌门人马*国强势入驻王者峡谷,其独门绝技闪电伍连鞭,连续五次攻击不仅伤害爆炸而且还可暴击,一举成为AD杀手。

马同志在不出任何装备的情况下每次的伤害为 A ,对面AD的血量为 B 。现在马同志打算出装了,他打算出全暴击装,那么他想知道,当暴击率达到多少的时候能有 90% 的概率秒掉AD?当血量为 0 即可判断为死亡。

$$

69岁的老同志请您帮他算一下最少要多少的暴击率能有 90% 的概率秒掉AD。

注意,当暴击率为 P 时,每次攻击都有 P 的概率暴击。本题的暴击伤害为普通攻击的 2.0 倍。

输入格式:

第一行给出样例组数 t(1<=t<=100)

之后的 t 行,每行给出两个正整数 A,B(1<=A,B<=108)

输出格式:

对于每组输入数据,如果AD能有 90% 的概率被秒掉了,请在一行内输出最小的暴击率,保留两位小数(四舍五入);否则请在一行内输出"HZWZ",不带引号。

输入样例0:

在这里给出一组输入。例如:

4
2 20
2 21
2 10
2 15

输出样例0:

在这里给出相应的输出。例如:

97.91
HZWZ
0.00
75.34
#include<bits/stdc++.h>

#define endl '\n'
using namespace std;
typedef long long ll;
const double eps = 1e-7;
double n, m;
ll cnt;
double a[6] = {1, 5, 10, 10, 5, 1}; //有i个暴击的组合数

bool check(double p) {
    p /= 100;
    double res = 0;
    for (ll k = cnt; k <= 5; k++) {
        double x = 1;
        x *= pow(p, k); //暴击的概率
        x *= pow(1 - p, 5 - k); //不暴击的概率
        res += x * a[k];
    }
    if (res * 100.0 >= 90.0)return true;
    return false;
}

int main() {
    ll T;
    cin >> T;
    while (T--) {
        cin >> n >> m;
        if (n * 2 * 5 < m)cout << "HZWZ" << endl;
        else {
            cnt = 0;
            double sum = n * 5.0;
            while (sum < m)sum += n, cnt++; //算暴击次数
            double l = 0, r = 100;
            while (r - l > eps) {   //浮点二分
                double mid = (l + r) / 2.0;
                if (check(mid))r = mid;
                else l = mid;
            }
            printf("%.2f\n", l);
        }
    }
}

  • 13
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值