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
Source
2020 Multi-University Training Contest 4
Recommend
liuyiding
签到
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
#include <map>
using namespace std;
typedef long long ll;
int a[1005],d[1005];
int main() {
int T;scanf("%d",&T);
while(T--) {
int n;scanf("%d",&n);
int mi = 1e9;
for(int i = 1;i <= n;i++) {
scanf("%d%d",&a[i],&d[i]);
mi = min(mi,((100 + a[i] - 1) / a[i] - 1) * d[i]);
}
double ans = 0.0;
for(int i = 1;i <= n;i++) {
if(((100 + a[i] - 1) / a[i] - 1) * d[i] == mi) {
ans += (double)1 / (2 * n);
} else {
ans += (double)1 / n;
}
}
printf("%.10f\n",ans);
}
return 0;
}