fork(1) download
  1. import java.util.*;
  2. import java.lang.*;
  3. import java.io.*;
  4.  
  5. class MSE2729117
  6. {
  7. final int n, k;
  8. Random rand = new Random();
  9.  
  10. MSE2729117(int n, int k) {
  11. this.n = n;
  12. this.k = k;
  13. }
  14.  
  15. int simul(int tries) {
  16. System.out.printf("n\t k\t r\t pd\t mv\n");
  17. int bestr = -1;
  18. double bestrp = 1;
  19. for( int r = 1; r <= n; r++ ) {
  20. double probdraw = 0;
  21. double acmv = 0;
  22. int[] votespc = new int[n];
  23. int[] votes = new int[r];
  24. for( int t = 0; t < tries; t++ ) {
  25. Arrays.fill(votespc, 0);
  26. for( int kk = 0; kk < k; kk++ ) {
  27. getRandomSample(n, votes);
  28. for( int x : votes )
  29. votespc[x]++;
  30. }
  31. int mvv = 0, mvC = 0; // MOST VOTED VOTES AND CHOICE
  32. for( int nn = 0; nn < n; nn++ ) {
  33. if( votespc[nn] > mvv ) {
  34. mvC = 1;
  35. mvv = votespc[nn];
  36. } else if( votespc[nn] == mvv ) mvC++;
  37. }
  38. acmv += mvv;
  39. if( mvC > 1 ) probdraw++;
  40. }
  41. acmv /= tries;
  42. probdraw /= tries;
  43. if( probdraw < bestrp ) {
  44. bestrp = probdraw;
  45. bestr = r;
  46. }
  47. System.out.printf("%d\t %d\t %d\t %.4f\t %.4f\n", n, k, r, probdraw, acmv);
  48. }
  49. System.out.printf("Best r: %d (p=%.4f)\n", bestr, bestrp);
  50. return bestr;
  51. }
  52.  
  53. public int[] getRandomSample(int nn, int[] randomSample) throws IllegalArgumentException {
  54. int sampleSize = randomSample.length;
  55. for( int sampleIndex = 0; sampleIndex < nn; ++sampleIndex ) {
  56. Integer value = sampleIndex;
  57. if( sampleIndex < sampleSize ) {
  58. randomSample[sampleIndex] = value;
  59. } else {
  60. int randomNumber = rand.nextInt(sampleIndex + 1);
  61. if( randomNumber < sampleSize ) {
  62. randomSample[randomNumber] = value;
  63. }
  64. }
  65. }
  66. return randomSample;
  67. }
  68.  
  69. public static void main(String[] args) {
  70. int n = 30;
  71. int k = 4;
  72. MSE2729117 mse = new MSE2729117(n, k);
  73. mse.simul(30000);
  74. }
  75.  
  76. }
Success #stdin #stdout 1s 31616KB
stdin
Standard input is empty
stdout
n	 k	 r	 pd	 mv
30	 4	 1	 0.8168	 1.1918
30	 4	 2	 0.5398	 1.6185
30	 4	 3	 0.5619	 1.9943
30	 4	 4	 0.6771	 2.2276
30	 4	 5	 0.6400	 2.4337
30	 4	 6	 0.5547	 2.6562
30	 4	 7	 0.5399	 2.8661
30	 4	 8	 0.5859	 3.0466
30	 4	 9	 0.6543	 3.1888
30	 4	 10	 0.6646	 3.3177
30	 4	 11	 0.6388	 3.4470
30	 4	 12	 0.5953	 3.5692
30	 4	 13	 0.5849	 3.6961
30	 4	 14	 0.6297	 3.8074
30	 4	 15	 0.7054	 3.8940
30	 4	 16	 0.8113	 3.9508
30	 4	 17	 0.9038	 3.9831
30	 4	 18	 0.9636	 3.9957
30	 4	 19	 0.9924	 3.9993
30	 4	 20	 0.9987	 3.9999
30	 4	 21	 1.0000	 4.0000
30	 4	 22	 1.0000	 4.0000
30	 4	 23	 1.0000	 4.0000
30	 4	 24	 1.0000	 4.0000
30	 4	 25	 1.0000	 4.0000
30	 4	 26	 1.0000	 4.0000
30	 4	 27	 1.0000	 4.0000
30	 4	 28	 1.0000	 4.0000
30	 4	 29	 1.0000	 4.0000
30	 4	 30	 1.0000	 4.0000
Best r: 2 (p=0.5398)