投票问题
如果一个选举有p 个人投A 的票,q 个人投B 的票,p > q,那么,在整个投票过程中A 的票累计数一直严格多于B 的票累计数的概率? (p-q)/(p+q)
分析
一个投票次序如果A 的选票累计数从头到尾都一直严格领先于B 的选票累计数,
我们就把它叫做有利次序,否则叫无利次序。显然,凡是以B 票开始的次序都是无利
次序。在以A 票开始的次序中,也有一些是无利次序。怎么来数这些无利次序呢?我
们知道有利次序永远不能有A 票数与B 票数相等的时候。换句话说,任何无利次序都
必须要在某一个时间出现两个选票数相等的时候。我们把第一次A,B 票数相等的点叫
E 点。现在把从第一票到E 点的所有票都反转,也就是说A 票换成B 票,B 票换成A 票。
这个次序就变成了一个以B 票开始的次序。这样,我们建立了一个以A 开始的无利次
序到以B 开始的次序的对应。反过来,因为A 的总票数大于B 的总票数,所以,以B
票开始的次序必须出现A 票数与B 票数相等的时候。通过上面的反转变化,我们可以
把任意以B 开始的次序换成一个以A 开始的无利次序。也就是说,我们在以A 开始的
无利次序与所有以B 开始的次序中建立了一个1-1 对应。所以,所有无利次序等于两
倍于以B 开始的所有次序。那么,以B 开始的次序有多少呢?由于A 有p 票,B 有q 票,
以B 票开始的次序占总次序数的q/(p + q)。所以,有利次序的概率是1 - 2*q/(p + q)
= (p - q)/(p + q)。证毕。
java
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.text.DecimalFormat;
public class B {
public void solve()
{
try {
BufferedReader br = new BufferedReader(new FileReader("D:/IIT Hyd Sem-4/CJdata/B-small-attempt0.in"));
BufferedWriter bw = new BufferedWriter(new FileWriter("D:/IIT Hyd Sem-4/CJdata/B_out.txt"));
//BufferedWriter bw = new BufferedWriter(new FileWriter("D:/IIT Hyd Sem-4/CJdata/B_out_Large.txt"));
int T = Integer.parseInt(br.readLine());
for(int t=0;t<T;t++)
{
//int M = Integer.parseInt(br.readLine());
double ans=0;
String[] s = br.readLine().split(" ");
int N = Integer.parseInt(s[0]);
int M = Integer.parseInt(s[1]);
ans = (double)(N-M)/(N+M);
//double x = 22/7;
String str = new DecimalFormat("0.00000000").format(ans);
bw.write("Case #"+(t+1)+": "+str+"\n");
}
br.close();
bw.close();
}
catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
B a = new B();
a.solve();
}
}