fork download
  1. import java.util.*;
  2. import java.lang.*;
  3. import java.io.*;
  4. import java.math.*;
  5.  
  6. class Ideone
  7. {
  8. public static void main (String[] args) throws java.lang.Exception
  9. {
  10. // サイコロ振り500回の1が出るの回数の統計?
  11.  
  12. BigInteger[][] dp = new BigInteger[501][501];
  13. for (int i = 0; i <= 500; i++) {
  14. for (int k = 0; k <= 500; k++)
  15. dp[i][k] = BigInteger.ZERO;
  16. }
  17.  
  18. dp[0][0] = BigInteger.ONE;
  19. for (int i = 0; i < 500; i++) {
  20. for (int k = 0; k < 500; k++) {
  21. dp[i+1][k+1] = dp[i+1][k+1].add(dp[i][k]);
  22. dp[i+1][k] = dp[i+1][k].add(dp[i][k].multiply(BigInteger.valueOf(5)));
  23. }
  24. }
  25. BigInteger[] result = dp[500];
  26.  
  27.  
  28. BigInteger count = BigInteger.ZERO;
  29. BigInteger sum = BigInteger.ZERO;
  30. for (int i = 0; i <= 500; i++) {
  31. sum = sum.add(BigInteger.valueOf(i).multiply(result[i]));
  32. count = count.add(result[i]);
  33. }
  34. double average = new BigDecimal(sum.multiply(BigInteger.valueOf(10000)).divide(count), 4).doubleValue();
  35.  
  36.  
  37. sum = BigInteger.ZERO;
  38. for (int i = 0; i <= 500; i++) {
  39. sum = sum.add(BigInteger.valueOf(i).subtract(BigInteger.valueOf(Math.round(average))).pow(2).multiply(result[i]));
  40. }
  41. double sd = Math.sqrt(new BigDecimal(sum.multiply(BigInteger.valueOf(10000)).divide(count), 4).doubleValue());
  42.  
  43.  
  44. sum = BigInteger.ZERO;
  45. for (int i = (int)Math.round(average-sd); i <= (int)Math.round(average+sd); i++) {
  46. sum = sum.add(result[i]);
  47. }
  48. double avgsdRate = new BigDecimal(sum.multiply(BigInteger.valueOf(10000)).divide(count), 4).doubleValue();
  49.  
  50.  
  51. sum = BigInteger.ZERO;
  52. for (int i = (int)Math.round(average-sd*2); i <= (int)Math.round(average+sd*2); i++) {
  53. sum = sum.add(result[i]);
  54. }
  55. double avg2sdRate = new BigDecimal(sum.multiply(BigInteger.valueOf(10000)).divide(count), 4).doubleValue();
  56.  
  57.  
  58. System.out.println("count = " + count);
  59. System.out.println("average = " + average);
  60. System.out.println("sd = " + sd);
  61. System.out.println("(avg-sd,avg+sd) = (" + (average-sd) + ", " + (average+sd)+")");
  62. System.out.println("avg-sd-rate = " + avgsdRate);
  63. System.out.println("(avg-2*sd,avg+2*sd) = (" + (average-sd*2) + ", " + (average+sd*2)+")");
  64. System.out.println("avg-2sd-rate = " + avg2sdRate);
  65. }
  66. }
Success #stdin #stdout 0.22s 99988KB
stdin
Standard input is empty
stdout
count = 119021437664963792537723297437431016338754608120980105257441181685520966700943487058936537230040190171014982073542728096082603302840067936200540464530413969086607542580700221242056552873159475481388537600101586999295284259342004482880541700283315917694609151706937415378469716991574547341971575505458358546916975124776841611395860186633259859231224976310262480923737109509375174272798949376
average = 83.3333
sd = 8.339994004794008
(avg-sd,avg+sd) = (74.99330599520599, 91.673294004794)
avg-sd-rate = 0.7197
(avg-2*sd,avg+2*sd) = (66.65331199041198, 100.01328800958801)
avg-2sd-rate = 0.9589