領先投票.md

投票問題

如果一個選舉有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();
        }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章