Jobdu -1421-Abor[概率计算] | Acm之家


九度-1421-Abor[概率计算] | Acm之家
As we all known, AbOr has a lots of girls in a palace called "Hou" (About 30 millions).Now you are given n people without knowing their gender(Male and Female are equally likely for anyone). You also know the relationship between them! You want to know what is the expecting number of "abor" that could be found , where "abor" is defined as:(1) Only Male might be considered;(2) The Male who has at least m Females friends is called "abor".
输入:
        The first line is one integer T indicates the number of the test cases. (T <= 10000)Then for every case, the first line has only two integers n and m, indicating the number of people and the value of m.(0≤m≤n≤20)Then one n by n symmetric matrix A, where A[i][j] is 1 if j is a friend of i(vice versa) and 0 otherwise;(A[i][i] is always 0)
输出:
        Output the expecting number of "abor" in the given case. The answer must round to two digital after the decimal point.
样例输入:
3  2 1  01  10  2 0  01  10  3 2  011  101  110
样例输出:
0.50  1.00  0.38
分析:
男女出现的概率是相同的。只有男生才能叫做abor
以第三个例子:
011  
101  
110
3个人期望值是相同的都为 0.5 * 0.5 * 0.5 ,结果即为 0.5 * 0.5 * 0.5 * 3 = 0.38
对于任意的n,需要分别计算再相加。

因为对于每一个人,他需要计算他有多少个女性朋友,同时朋友的性别是随机的,概率为0.5,这个题目就相当于算期望了
对每个人来说,他本身是男性的可能性为0.5 ,他有至少m个的概率就只需要在他的朋友FriendsCount中选m 个就好了,这个是组合问题。但是需要注意的是,m+1,m+2,...,FriendsCount 都是满足的,加起来就是每一个人的可能性,不要忘记前面的要求,因为他必须是男性,所以在组合概率的基础上还需要乘以0.5
  1. int Cal(int n, int m) {  
  2.     if(m==0)  
  3.         return 1;  
  4.     if ( m==1 )  
  5.         return n;  
  6.     else if ( n==m )  
  7.         return 1;  
  8.     else return ( Cal(n-1,m-1 )+ Cal(n-1,m));  
  9. }  
  10. int main()  
  11. {  
  12.     //freopen("data.in","r",stdin);  
  13.     int num,n,m;  
  14.     double B[22];  
  15.     B[0]=1;  
  16.     for(int i=1;i<22;i++)  
  17.         B[i]=B[i-1]/2;  
  18.     scanf("%d",&num);  
  19.     while(num--)  
  20.     {  
  21.         scanf("%d%d",&n,&m);  
  22.         double result=0;  
  23.         for(int i=0;i<n;i++)  
  24.         {  
  25.             int tmp=0;  
  26.             char c[21];  
  27.             scanf("%s",&c);  
  28.             for (int j=0;j<n;j++)  
  29.             {             
  30.                 if(c[j]=='1')  
  31.                     tmp++;  
  32.             }  
  33.             for(int k=m;k<=tmp;k++)  
  34.                 result=result+B[tmp+1]*Cal(tmp,k);  
  35.         }  
  36.         printf("%.2f\n",result);  
  37.     }  
  38.     return 0;  
  39. }  
04char ch[30];
05long double po[30];
06long long C(int a,int b)
07{
08    long long u=1,d=1;
09    if(b-a<a)
10    a = b-a;
11    int bb = b,aa = a;
12    for(int i=0;i<a;i++)
13    {
14        u*=bb--;
15        d*=aa--;
16        //aa--;
17        //bb--;
18    }
19    long long sum = u/d;
20    return sum;
21}
22void Init()
23{
24    po[0] = 1.0;
25    for(int i=1;i<=21;i++)
26    po[i] = po[i-1]*0.5;
27}   
28int main()
29{
30    int t,j;
31    Init();
32    scanf("%d",&t);
33    while(t--)
34    {
35        int n,m,f;
36        long double p = 0.0;
37        scanf("%d%d",&n,&m);
38
39        for(int i=1;i<=n;i++)
40        {
41            f = 0;
42            scanf("%s",ch);
43            for( j=0;j<n;j++)
44                if(ch[j]=='1')
45                    f++;   
46                if(f<m)
47                    continue;
48
49                for(j=m;j<=f;j++)
50                    p+=C(j,f)*po[f+1];
51        }
52        if(m==0)
53        {
54            printf("1.00\n");
55            continue;
56        }
57        if(m==n)
58        {
59            printf("0.00\n");
60            continue;
61        }
62        printf("%0.2lf\n",(double)p);
63
64    }
65    return 0;
66}
Read full article from 九度-1421-Abor[概率计算] | Acm之家

Labels

LeetCode (1432) GeeksforGeeks (1122) LeetCode - Review (1067) Review (882) Algorithm (668) to-do (609) Classic Algorithm (270) Google Interview (237) Classic Interview (222) Dynamic Programming (220) DP (186) Bit Algorithms (145) POJ (141) Math (137) Tree (132) LeetCode - Phone (129) EPI (122) Cracking Coding Interview (119) DFS (115) Difficult Algorithm (115) Lintcode (115) Different Solutions (110) Smart Algorithm (104) Binary Search (96) BFS (91) HackerRank (90) Binary Tree (86) Hard (79) Two Pointers (78) Stack (76) Company-Facebook (75) BST (72) Graph Algorithm (72) Time Complexity (69) Greedy Algorithm (68) Interval (63) Company - Google (62) Geometry Algorithm (61) Interview Corner (61) LeetCode - Extended (61) Union-Find (60) Trie (58) Advanced Data Structure (56) List (56) Priority Queue (53) Codility (52) ComProGuide (50) LeetCode Hard (50) Matrix (50) Bisection (48) Segment Tree (48) Sliding Window (48) USACO (46) Space Optimization (45) Company-Airbnb (41) Greedy (41) Mathematical Algorithm (41) Tree - Post-Order (41) ACM-ICPC (40) Algorithm Interview (40) Data Structure Design (40) Graph (40) Backtracking (39) Data Structure (39) Jobdu (39) Random (39) Codeforces (38) Knapsack (38) LeetCode - DP (38) Recursive Algorithm (38) String Algorithm (38) TopCoder (38) Sort (37) Introduction to Algorithms (36) Pre-Sort (36) Beauty of Programming (35) Must Known (34) Binary Search Tree (33) Follow Up (33) prismoskills (33) Palindrome (32) Permutation (31) Array (30) Google Code Jam (30) HDU (30) Array O(N) (29) Logic Thinking (29) Monotonic Stack (29) Puzzles (29) Code - Detail (27) Company-Zenefits (27) Microsoft 100 - July (27) Queue (27) Binary Indexed Trees (26) TreeMap (26) to-do-must (26) 1point3acres (25) GeeksQuiz (25) Merge Sort (25) Reverse Thinking (25) hihocoder (25) Company - LinkedIn (24) Hash (24) High Frequency (24) Summary (24) Divide and Conquer (23) Proof (23) Game Theory (22) Topological Sort (22) Lintcode - Review (21) Tree - Modification (21) Algorithm Game (20) CareerCup (20) Company - Twitter (20) DFS + Review (20) DP - Relation (20) Brain Teaser (19) DP - Tree (19) Left and Right Array (19) O(N) (19) Sweep Line (19) UVA (19) DP - Bit Masking (18) LeetCode - Thinking (18) KMP (17) LeetCode - TODO (17) Probabilities (17) Simulation (17) String Search (17) Codercareer (16) Company-Uber (16) Iterator (16) Number (16) O(1) Space (16) Shortest Path (16) itint5 (16) DFS+Cache (15) Dijkstra (15) Euclidean GCD (15) Heap (15) LeetCode - Hard (15) Majority (15) Number Theory (15) Rolling Hash (15) Tree Traversal (15) Brute Force (14) Bucket Sort (14) DP - Knapsack (14) DP - Probability (14) Difficult (14) Fast Power Algorithm (14) Pattern (14) Prefix Sum (14) TreeSet (14) Algorithm Videos (13) Amazon Interview (13) Basic Algorithm (13) Codechef (13) Combination (13) Computational Geometry (13) DP - Digit (13) LCA (13) LeetCode - DFS (13) Linked List (13) Long Increasing Sequence(LIS) (13) Math-Divisible (13) Reservoir Sampling (13) mitbbs (13) Algorithm - How To (12) Company - Microsoft (12) DP - Interval (12) DP - Multiple Relation (12) DP - Relation Optimization (12) LeetCode - Classic (12) Level Order Traversal (12) Prime (12) Pruning (12) Reconstruct Tree (12) Thinking (12) X Sum (12) AOJ (11) Bit Mask (11) Company-Snapchat (11) DP - Space Optimization (11) Dequeue (11) Graph DFS (11) MinMax (11) Miscs (11) Princeton (11) Quick Sort (11) Stack - Tree (11) 尺取法 (11) 挑战程序设计竞赛 (11) Coin Change (10) DFS+Backtracking (10) Facebook Hacker Cup (10) Fast Slow Pointers (10) HackerRank Easy (10) Interval Tree (10) Limited Range (10) Matrix - Traverse (10) Monotone Queue (10) SPOJ (10) Starting Point (10) States (10) Stock (10) Theory (10) Tutorialhorizon (10) Kadane - Extended (9) Mathblog (9) Max-Min Flow (9) Maze (9) Median (9) O(32N) (9) Quick Select (9) Stack Overflow (9) System Design (9) Tree - Conversion (9) Use XOR (9) Book Notes (8) Company-Amazon (8) DFS+BFS (8) DP - States (8) Expression (8) Longest Common Subsequence(LCS) (8) One Pass (8) Quadtrees (8) Traversal Once (8) Trie - Suffix (8) 穷竭搜索 (8) Algorithm Problem List (7) All Sub (7) Catalan Number (7) Cycle (7) DP - Cases (7) Facebook Interview (7) Fibonacci Numbers (7) Flood fill (7) Game Nim (7) Graph BFS (7) HackerRank Difficult (7) Hackerearth (7) Inversion (7) Kadane’s Algorithm (7) Manacher (7) Morris Traversal (7) Multiple Data Structures (7) Normalized Key (7) O(XN) (7) Radix Sort (7) Recursion (7) Sampling (7) Suffix Array (7) Tech-Queries (7) Tree - Serialization (7) Tree DP (7) Trie - Bit (7) 蓝桥杯 (7) Algorithm - Brain Teaser (6) BFS - Priority Queue (6) BFS - Unusual (6) Classic Data Structure Impl (6) DP - 2D (6) DP - Monotone Queue (6) DP - Unusual (6) DP-Space Optimization (6) Dutch Flag (6) How To (6) Interviewstreet (6) Knapsack - MultiplePack (6) Local MinMax (6) MST (6) Minimum Spanning Tree (6) Number - Reach (6) Parentheses (6) Pre-Sum (6) Probability (6) Programming Pearls (6) Rabin-Karp (6) Reverse (6) Scan from right (6) Schedule (6) Stream (6) Subset Sum (6) TSP (6) Xpost (6) n00tc0d3r (6) reddit (6) AI (5) Abbreviation (5) Anagram (5) Art Of Programming-July (5) Assumption (5) Bellman Ford (5) Big Data (5) Code - Solid (5) Code Kata (5) Codility-lessons (5) Coding (5) Company - WMware (5) Convex Hull (5) Crazyforcode (5) DFS - Multiple (5) DFS+DP (5) DP - Multi-Dimension (5) DP-Multiple Relation (5) Eulerian Cycle (5) Graph - Unusual (5) Graph Cycle (5) Hash Strategy (5) Immutability (5) Java (5) LogN (5) Manhattan Distance (5) Matrix Chain Multiplication (5) N Queens (5) Pre-Sort: Index (5) Quick Partition (5) Quora (5) Randomized Algorithms (5) Resources (5) Robot (5) SPFA(Shortest Path Faster Algorithm) (5) Shuffle (5) Sieve of Eratosthenes (5) Strongly Connected Components (5) Subarray Sum (5) Sudoku (5) Suffix Tree (5) Swap (5) Threaded (5) Tree - Creation (5) Warshall Floyd (5) Word Search (5) jiuzhang (5)

Popular Posts