Problem Description
Zhang3 is playing a shooting game with Father. In the game there are two players trying to kill each other to win the game.
The game provides n weapons, each has two properties: Damage and Delay. The ith weapon has Damage Ai and Delay Di. When a player shoots with this weapon, his enemy’s HP is reduced by Ai, then he must wait for Di ms before he can shoot again.
The game processes as follows:
- Before the game starts, Zhang3 and Father choose a weapon respectively. Father always randomly chooses one of the n weapons with equal probabilities. Each player can only use the chosen weapon during the game.
- When the game starts, Zhang3 and Father have 100 HP each. They make their first shot at the same time.
- They keep shooting as quickly as possible. That means, a player shoots instantly whenever he can shoot, until the game ends.
- When a player’s HP is reduced to 0 or lower, he dies and the game ends. If the other player is still alive (i.e. has HP higher than 0), then the living player wins the game; otherwise (if the two players die at the same time), each player has 50% probability to win the game.
Zhang3 wants to win the game. Please help her to choose a weapon so that the probability to win is maximized. Print the optimal probability.
Input
The first line of the input gives the number of test cases, T(1≤T≤100). T test cases follow.
For each test case, the first line contains an integer n(1≤n≤1000), the number of weapons in the game.
Then n lines follow, the ith of which contains two integers Ai,Di(1≤Ai≤100,1≤Di≤10000), representing the Damage and the Delay of each weapon.
The sum of n in all test cases doesn’t exceed 2000.
Output
For each test case, print a line with a real number p(0≤p≤1), representing the optimal probability.
Your answers should have absolute or relative errors of at most 10−6.
Sample Input
2
1
100 100
4
50 50
40 20
30 10
20 100
Sample Output
0.5
0.875
题意:两人对战,有n中武器可选,武器有伤害和冷却时间,一人随机选,另一人主动选,问主动选的人的获胜概率
思路:找出伤害最快超过或等于100的枪,统计器数量num,概率就是1-num/2.0/n
代码:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int T;
cin>>T;
while(T--)
{
int n;
cin>>n;
int m=1e6+5;
int num=0;
for(int i=0;i<n;++i)
{
double A,D;
cin>>A>>D;
int temp = (ceil(100/A)-1)*D;
if(temp<m)
{
m=temp;
num = 1;
}
else if(temp==m)
{
num++;
}
}
cout<<1-num/2.0/n<<endl;
}
}