
题意:爸爸和儿子玩游戏,每个人只能从n个武器中选择一种战斗,每种武器还有两个属性,一个是伤害A,另一个是两次使用的时间间隔D,爸爸的武器随机选择,儿子想赢得比赛,替他选一种武器,求最大的获胜率。
思路:如果儿子要赢,那肯定选性能最好的,在时间相同的情况下打出的伤害最先到达100,而爸爸随机选择,求出性能最强的武器的个数k,爸爸选择最强的概率为k/n,则儿子获胜概率为0.5*(k/n),当爸爸未选择最强武器,概率为(n-k)/k,儿子一定会赢,概率为(n-k)/k,两个数相加就是赢的最大概率。
注意;每轮测试结束一些变量的初始化;main(void);数据类型即范围。
#include <bits/stdc++.h>
#include <map>
using namespace std;
double ans;
int h,t;
int k,m;
int main(void){
int T;
cin>>T;
while(T--){
double hu,mi=1e9;
k=0;
int n;
cin>>n;
m=n;
while(m--){
cin>>h>>t;
hu =((100 + h - 1) / h - 1) * t;//杀死需要的时间
if(hu < mi){
mi = hu;
k=1;
}
else if(hu == mi){
k++;
}
}
ans = (double)(n - k)/ n + (double)k/(2*n);
printf("%.20lf\n", ans);
}
return 0;
}
本文探讨了在一款父子间的游戏中,如何通过算法选出最佳武器以获得最高胜率。儿子面对父亲随机选择的武器,需要找到拥有最优伤害与时间间隔的武器,以确保在相同时间内造成最大伤害。文章详细解释了算法思路,包括计算每种武器击败对手所需时间,并确定最强武器的数量,以此计算儿子的获胜概率。
204

被折叠的 条评论
为什么被折叠?



