题意:爸爸和儿子玩游戏,每个人只能从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;
}