fork download
  1. #include <climits>
  2. #include <cstdlib>
  3. #include <random>
  4. #include <functional>
  5.  
  6. double rand(unsigned count, unsigned sides) {
  7. if (count<=100) {
  8. int result=0;
  9. for(int i=0; i<count; ++i)
  10. result += rand()/(RAND_MAX/sides);
  11. return result;
  12. }
  13. static std::mt19937_64 engine;
  14. const double mean = .5*count*sides;
  15. const double stddev = std::sqrt(count*(1.0*sides*sides-1.0)/12.0);
  16. std::normal_distribution<double> distribution(mean, stddev);
  17. return std::floor(distribution(engine));
  18. }
  19.  
  20. #include <iostream>
  21.  
  22. int main() {
  23. int count, sides;
  24. while(std::cin >> count >> sides) {
  25. std::cout << count << 'd' << sides << '=' << rand(count, sides) << '\n';
  26. }
  27. return 0;
  28. }
Success #stdin #stdout 0s 2836KB
stdin
1 6
1 6
1 6
1 6
1 6
1 6
1 6
1 6
1 6
1 6
1 6
100 100
100 100
100 100
100 100
100 100
100 100
100 100
100 100
100 100
100 100
101 101
101 101
101 101
101 101
101 101
101 101
101 101
101 101
101 101
10000 10000
10000 10000
10000 10000
10000 10000
10000 10000
10000 10000
10000 10000
10000 10000
10000 10000
10000 10000
1000000 1000000
1000000 1000000
1000000 1000000
1000000 1000000
1000000 1000000
1000000 1000000
1000000 1000000
1000000 1000000
1000000 1000000
1000000 1000000
stdout
1d6=5
1d6=2
1d6=4
1d6=4
1d6=5
1d6=1
1d6=2
1d6=4
1d6=1
1d6=3
1d6=2
100d100=5421
100d100=5110
100d100=5061
100d100=4714
100d100=4816
100d100=5705
100d100=4772
100d100=4795
100d100=4864
100d100=4873
101d101=4899
101d101=5159
101d101=5084
101d101=4474
101d101=5233
101d101=5140
101d101=5438
101d101=4308
101d101=4849
10000d10000=4.97785e+07
10000d10000=4.97854e+07
10000d10000=4.99725e+07
10000d10000=4.95203e+07
10000d10000=5.01237e+07
10000d10000=4.99757e+07
10000d10000=5.01045e+07
10000d10000=5.05581e+07
10000d10000=5.0012e+07
10000d10000=4.97228e+07
1000000d1000000=4.99454e+11
1000000d1000000=5.00115e+11
1000000d1000000=5.00385e+11
1000000d1000000=5.00289e+11
1000000d1000000=4.99993e+11
1000000d1000000=5.00051e+11
1000000d1000000=5.00537e+11
1000000d1000000=4.99933e+11
1000000d1000000=4.99628e+11
1000000d1000000=4.99898e+11