fork download
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int bitcount(int x) {
  6. int c = 0;
  7. while (x) {
  8. c += x & 1;
  9. x>>=1;
  10. }
  11. return c;
  12. }
  13.  
  14. int bit(int v, int x, int y) {
  15. return ((v>>(y*5+x))&1)!=0;
  16. }
  17.  
  18. bool isBingo(int v) {
  19. return (bit(v, 0, 0)&&bit(v, 0, 1)&&bit(v, 0, 2)&&bit(v, 0, 3)&&bit(v, 0, 4))
  20. || (bit(v, 1, 0)&&bit(v, 1, 1)&&bit(v, 1, 2)&&bit(v, 1, 3)&&bit(v, 1, 4))
  21. || (bit(v, 2, 0)&&bit(v, 2, 1)&&bit(v, 2, 2)&&bit(v, 2, 3)&&bit(v, 2, 4))
  22. || (bit(v, 3, 0)&&bit(v, 3, 1)&&bit(v, 3, 2)&&bit(v, 3, 3)&&bit(v, 3, 4))
  23. || (bit(v, 4, 0)&&bit(v, 4, 1)&&bit(v, 4, 2)&&bit(v, 4, 3)&&bit(v, 4, 4))
  24. || (bit(v, 0, 0)&&bit(v, 1, 0)&&bit(v, 2, 0)&&bit(v, 3, 0)&&bit(v, 4, 0))
  25. || (bit(v, 0, 1)&&bit(v, 1, 1)&&bit(v, 2, 1)&&bit(v, 3, 1)&&bit(v, 4, 1))
  26. || (bit(v, 0, 2)&&bit(v, 1, 2)&&bit(v, 2, 2)&&bit(v, 3, 2)&&bit(v, 4, 2))
  27. || (bit(v, 0, 3)&&bit(v, 1, 3)&&bit(v, 2, 3)&&bit(v, 3, 3)&&bit(v, 4, 3))
  28. || (bit(v, 0, 4)&&bit(v, 1, 4)&&bit(v, 2, 4)&&bit(v, 3, 4)&&bit(v, 4, 4))
  29. || (bit(v, 0, 0)&&bit(v, 1, 1)&&bit(v, 2, 2)&&bit(v, 3, 3)&&bit(v, 4, 4))
  30. || (bit(v, 0, 4)&&bit(v, 1, 3)&&bit(v, 2, 2)&&bit(v, 3, 1)&&bit(v, 4, 0))
  31. ;
  32. }
  33.  
  34. bool isReach(int v) {
  35. return (4==bit(v, 0, 0)+bit(v, 0, 1)+bit(v, 0, 2)+bit(v, 0, 3)+bit(v, 0, 4))
  36. || (4==bit(v, 1, 0)+bit(v, 1, 1)+bit(v, 1, 2)+bit(v, 1, 3)+bit(v, 1, 4))
  37. || (4==bit(v, 2, 0)+bit(v, 2, 1)+bit(v, 2, 2)+bit(v, 2, 3)+bit(v, 2, 4))
  38. || (4==bit(v, 3, 0)+bit(v, 3, 1)+bit(v, 3, 2)+bit(v, 3, 3)+bit(v, 3, 4))
  39. || (4==bit(v, 4, 0)+bit(v, 4, 1)+bit(v, 4, 2)+bit(v, 4, 3)+bit(v, 4, 4))
  40. || (4==bit(v, 0, 0)+bit(v, 1, 0)+bit(v, 2, 0)+bit(v, 3, 0)+bit(v, 4, 0))
  41. || (4==bit(v, 0, 1)+bit(v, 1, 1)+bit(v, 2, 1)+bit(v, 3, 1)+bit(v, 4, 1))
  42. || (4==bit(v, 0, 2)+bit(v, 1, 2)+bit(v, 2, 2)+bit(v, 3, 2)+bit(v, 4, 2))
  43. || (4==bit(v, 0, 3)+bit(v, 1, 3)+bit(v, 2, 3)+bit(v, 3, 3)+bit(v, 4, 3))
  44. || (4==bit(v, 0, 4)+bit(v, 1, 4)+bit(v, 2, 4)+bit(v, 3, 4)+bit(v, 4, 4))
  45. || (4==bit(v, 0, 0)+bit(v, 1, 1)+bit(v, 2, 2)+bit(v, 3, 3)+bit(v, 4, 4))
  46. || (4==bit(v, 0, 4)+bit(v, 1, 3)+bit(v, 2, 2)+bit(v, 3, 1)+bit(v, 4, 0))
  47. ;
  48. }
  49.  
  50.  
  51. int main() {
  52.  
  53. int total[26] = {0};
  54. int bingo[26] = {0};
  55. int reach[26] = {0};
  56.  
  57. const int end = 1 << 25;
  58. for (int i = 0; i < end; i++) {
  59. int c = bitcount(i);
  60. total[c]++;
  61. if (isBingo(i)) bingo[c]++;
  62. else if (isReach(i)) reach[c]++;
  63. }
  64.  
  65. puts(" total bingo reach bingoRate reachRate bothRate");
  66. for (int i = 0; i < 26; i++) {
  67. double br = double(bingo[i]) / double(total[i]);
  68. double rr = double(reach[i]) / double(total[i]);
  69. double tr = double(bingo[i]+reach[i]) / double(total[i]);
  70. printf("N=%2d: %7d %7d %7d %0.8lf %0.8lf %0.8lf\n",
  71. i, total[i], bingo[i], reach[i],
  72. br,rr,tr);
  73. }
  74.  
  75. return 0;
  76. }
Success #stdin #stdout 1.1s 15240KB
stdin
Standard input is empty
stdout
      total   bingo   reach   bingoRate  reachRate  bothRate
N= 0:       1       0       0 0.00000000 0.00000000 0.00000000
N= 1:      25       0       0 0.00000000 0.00000000 0.00000000
N= 2:     300       0       0 0.00000000 0.00000000 0.00000000
N= 3:    2300       0       0 0.00000000 0.00000000 0.00000000
N= 4:   12650       0      60 0.00000000 0.00474308 0.00474308
N= 5:   53130      12    1200 0.00022586 0.02258611 0.02281197
N= 6:  177100     240   11400 0.00135517 0.06437041 0.06572558
N= 7:  480700    2280   67664 0.00474308 0.14076139 0.14550447
N= 8: 1081575   13680  278010 0.01264822 0.25704181 0.26969004
N= 9: 2042975   58094  828892 0.02843598 0.40572792 0.43416390
N=10: 3268760  185292 1834196 0.05668572 0.56112899 0.61781471
N=11: 4457400  459300 3045180 0.10304213 0.68317405 0.78621618
N=12: 5200300  902428 3818478 0.17353383 0.73428033 0.90781416
N=13: 5200300 1419596 3638318 0.27298348 0.69963617 0.97261966
N=14: 4457400 1792852 2644296 0.40221923 0.59323731 0.99545654
N=15: 3268760 1812188 1455760 0.55439616 0.44535543 0.99975159
N=16: 2042975 1455040  587935 0.71221625 0.28778375 1.00000000
N=17: 1081575  919213  162362 0.84988373 0.15011627 1.00000000
N=18:  480700  453612   27088 0.94364885 0.05635115 1.00000000
N=19:  177100  174924    2176 0.98771316 0.01228684 1.00000000
N=20:   53130   53082      48 0.99909656 0.00090344 1.00000000
N=21:   12650   12650       0 1.00000000 0.00000000 1.00000000
N=22:    2300    2300       0 1.00000000 0.00000000 1.00000000
N=23:     300     300       0 1.00000000 0.00000000 1.00000000
N=24:      25      25       0 1.00000000 0.00000000 1.00000000
N=25:       1       1       0 1.00000000 0.00000000 1.00000000