import java.util.*;
import java.lang.*;
import java.io.*;
class MSE2729117
{
final int n, k;
MSE2729117(int n, int k) {
this.n = n;
this.k = k;
}
int simul(int tries) {
System.
out.
printf("n\t k\t r\t pd\t mv\n"); int bestr = -1;
double bestrp = 1;
for( int r = 1; r <= n; r++ ) {
double probdraw = 0;
double acmv = 0;
int[] votespc = new int[n];
int[] votes = new int[r];
for( int t = 0; t < tries; t++ ) {
for( int kk = 0; kk < k; kk++ ) {
getRandomSample(n, votes);
for( int x : votes )
votespc[x]++;
}
int mvv = 0, mvC = 0; // MOST VOTED VOTES AND CHOICE
for( int nn = 0; nn < n; nn++ ) {
if( votespc[nn] > mvv ) {
mvC = 1;
mvv = votespc[nn];
} else if( votespc[nn] == mvv ) mvC++;
}
acmv += mvv;
if( mvC > 1 ) probdraw++;
}
acmv /= tries;
probdraw /= tries;
if( probdraw < bestrp ) {
bestrp = probdraw;
bestr = r;
}
System.
out.
printf("%d\t %d\t %d\t %.4f\t %.4f\n", n, k, r, probdraw, acmv
); }
System.
out.
printf("Best r: %d (p=%.4f)\n", bestr, bestrp
); return bestr;
}
int sampleSize = randomSample.length;
for( int sampleIndex = 0; sampleIndex < nn; ++sampleIndex ) {
if( sampleIndex < sampleSize ) {
randomSample[sampleIndex] = value;
} else {
int randomNumber = rand.nextInt(sampleIndex + 1);
if( randomNumber < sampleSize ) {
randomSample[randomNumber] = value;
}
}
}
return randomSample;
}
public static void main
(String[] args
) { int n = 30;
int k = 4;
MSE2729117 mse = new MSE2729117(n, k);
mse.simul(30000);
}
}
aW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgpjbGFzcyBNU0UyNzI5MTE3CnsKZmluYWwgaW50IG4sIGs7CglSYW5kb20gcmFuZCA9IG5ldyBSYW5kb20oKTsKCglNU0UyNzI5MTE3KGludCBuLCBpbnQgaykgewoJCXRoaXMubiA9IG47CgkJdGhpcy5rID0gazsKCX0KCglpbnQgc2ltdWwoaW50IHRyaWVzKSB7CgkJU3lzdGVtLm91dC5wcmludGYoIm5cdCBrXHQgclx0IHBkXHQgbXZcbiIpOwoJCWludCBiZXN0ciA9IC0xOwoJCWRvdWJsZSBiZXN0cnAgPSAxOwoJCWZvciggaW50IHIgPSAxOyByIDw9IG47IHIrKyApIHsKCQkJZG91YmxlIHByb2JkcmF3ID0gMDsKCQkJZG91YmxlIGFjbXYgPSAwOwoJCQlpbnRbXSB2b3Rlc3BjID0gbmV3IGludFtuXTsKCQkJaW50W10gdm90ZXMgPSBuZXcgaW50W3JdOwoJCQlmb3IoIGludCB0ID0gMDsgdCA8IHRyaWVzOyB0KysgKSB7CgkJCQlBcnJheXMuZmlsbCh2b3Rlc3BjLCAwKTsKCQkJCWZvciggaW50IGtrID0gMDsga2sgPCBrOyBraysrICkgewoJCQkJCWdldFJhbmRvbVNhbXBsZShuLCB2b3Rlcyk7CgkJCQkJZm9yKCBpbnQgeCA6IHZvdGVzICkKCQkJCQkJdm90ZXNwY1t4XSsrOwoJCQkJfQoJCQkJaW50IG12diA9IDAsIG12QyA9IDA7IC8vIE1PU1QgVk9URUQgVk9URVMgQU5EIENIT0lDRQoJCQkJZm9yKCBpbnQgbm4gPSAwOyBubiA8IG47IG5uKysgKSB7CgkJCQkJaWYoIHZvdGVzcGNbbm5dID4gbXZ2ICkgewoJCQkJCQltdkMgPSAxOwoJCQkJCQltdnYgPSB2b3Rlc3BjW25uXTsKCQkJCQl9IGVsc2UgaWYoIHZvdGVzcGNbbm5dID09IG12diApIG12QysrOwoJCQkJfQoJCQkJYWNtdiArPSBtdnY7CgkJCQlpZiggbXZDID4gMSApIHByb2JkcmF3Kys7CgkJCX0KCQkJYWNtdiAvPSB0cmllczsKCQkJcHJvYmRyYXcgLz0gdHJpZXM7CgkJCWlmKCBwcm9iZHJhdyA8IGJlc3RycCApIHsKCQkJCWJlc3RycCA9IHByb2JkcmF3OwoJCQkJYmVzdHIgPSByOwoJCQl9CgkJCVN5c3RlbS5vdXQucHJpbnRmKCIlZFx0ICVkXHQgJWRcdCAlLjRmXHQgJS40ZlxuIiwgbiwgaywgciwgcHJvYmRyYXcsIGFjbXYpOwoJCX0KCQlTeXN0ZW0ub3V0LnByaW50ZigiQmVzdCByOiAlZCAocD0lLjRmKVxuIiwgYmVzdHIsIGJlc3RycCk7CgkJcmV0dXJuIGJlc3RyOwoJfQoKCXB1YmxpYyBpbnRbXSBnZXRSYW5kb21TYW1wbGUoaW50IG5uLCBpbnRbXSByYW5kb21TYW1wbGUpIHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gewoJCWludCBzYW1wbGVTaXplID0gcmFuZG9tU2FtcGxlLmxlbmd0aDsKCQlmb3IoIGludCBzYW1wbGVJbmRleCA9IDA7IHNhbXBsZUluZGV4IDwgbm47ICsrc2FtcGxlSW5kZXggKSB7CgkJCUludGVnZXIgdmFsdWUgPSBzYW1wbGVJbmRleDsKCQkJaWYoIHNhbXBsZUluZGV4IDwgc2FtcGxlU2l6ZSApIHsKCQkJCXJhbmRvbVNhbXBsZVtzYW1wbGVJbmRleF0gPSB2YWx1ZTsKCQkJfSBlbHNlIHsKCQkJCWludCByYW5kb21OdW1iZXIgPSByYW5kLm5leHRJbnQoc2FtcGxlSW5kZXggKyAxKTsKCQkJCWlmKCByYW5kb21OdW1iZXIgPCBzYW1wbGVTaXplICkgewoJCQkJCXJhbmRvbVNhbXBsZVtyYW5kb21OdW1iZXJdID0gdmFsdWU7CgkJCQl9CgkJCX0KCQl9CgkJcmV0dXJuIHJhbmRvbVNhbXBsZTsKCX0KCglwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CgkJaW50IG4gPSAzMDsKCQlpbnQgayA9IDQ7CgkJTVNFMjcyOTExNyBtc2UgPSBuZXcgTVNFMjcyOTExNyhuLCBrKTsKCQltc2Uuc2ltdWwoMzAwMDApOwoJfQoKfQ==