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

代码长度限制

16 KB

时间限制

2000 ms

内存限制

64 MB

栈限制

8192 KB

概率是硬伤知道不会写。。。。

要求出我们至少需要的暴击次数然后枚举暴击概率就可以了

数组d储存 c(1,5)到c(5,5)的值

精度要开到1e-6不然会wa.....QAQ

​
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+15;
int n,m;
const double minn=1e-4;
int d[6]={1,5,10,10,5,1};
double arr[6];
int main() {
    for(int j=0;j<=5;j++){
        for(double i=0;i<=1;i+=0.000001){
            double ans=0;
            for(int x=j;x<=5;x++){
                double ans1=1.0;
                for(int k=1;k<=x;k++)ans1*=i;//暴击次数
                for(int k=x+1;k<=5;k++)ans1*=(1.0-i);//不暴击次数
                ans1*=d[x];
                ans+=ans1;
            }
            if(ans>=0.9){
                arr[j]=i*100.0;
                break;	
            }
        }
    }
	cin>>n;
	for(int j=1;j<=n;j++){
		int a=0,b=0;
		cin>>a>>b;
		b-=a*5;
		int cnt;
		if(b<=0)cnt=0;
		else cnt=(b+a-1)/a;
		if(cnt>5){
			cout<<"HZWZ"<<endl;
		}else{
			printf("%.2lf\n",arr[cnt]);
		}
	}
	
	return 0;
}

​

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值