/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
private static final int SAFE = 1;
private static final int DANGER = 2;
private static int guess(int[] flag, int floor, int remaining) {
int least = -1, assume = -1;
for(int i = flag.length - 1; i >= 0; --i) {
if(flag[i] == DANGER) {
assume = i - 1;
}
}
for(int i = 0; i < flag.length; ++i) {
if(flag[i] == SAFE) {
least = i;
}
}
if(assume == -1) {
assume = flag.length - 1;
}
if(least == assume && least == floor) {
return 0;
}
if(remaining == 0 || least == assume) {
return -1;
}
int t1 = -1, t2 = -1;
if(remaining > 1) {
int mid = (least + assume + 1) / 2;
if(mid <= floor) {
flag[mid] = SAFE;
int t = guess(flag, floor, remaining);
if(t == -1) {
t1 = -1;
} else {
t1 = 1 + t;
}
flag[mid] = 0;
} else {
flag[mid] = DANGER;
int t = guess(flag, floor, remaining - 1);
if(t == -1) {
t2 = -1;
} else {
t2 = 1 + t;
}
flag[mid] = 0;
}
} else {
int mid = least + 1;
if(mid <= floor) {
flag[mid] = SAFE;
int t = guess(flag, floor, remaining);
if(t == -1) {
t1 = -1;
} else {
t1 = 1 + t;
}
flag[mid] = 0;
} else {
flag[mid] = DANGER;
int t = guess(flag, floor, remaining - 1);
if(t == -1) {
t2 = -1;
} else {
t2 = 1 + t;
}
flag[mid] = 0;
}
}
if(t1 == -1) {
return t2;
} else if(t2 == -1) {
return t1;
}
return t1 > t2 ? t1 : t2;
}
public static void main
(String[] args
) { for(int floor = 1; floor <= 100; ++floor) {
int[] flag = new int[102];
for(int i = 0; i < flag.length; ++i) {
flag[i] = 0;
}
flag[0] = SAFE;
flag[101] = DANGER;
int times = guess(flag, floor, 2);
System.
out.
println(floor
+ "=>" + times
); }
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTQUZFID0gMTsKCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBEQU5HRVIgPSAyOwoJCglwcml2YXRlIHN0YXRpYyBpbnQgZ3Vlc3MoaW50W10gZmxhZywgaW50IGZsb29yLCBpbnQgcmVtYWluaW5nKSB7CgkJaW50IGxlYXN0ID0gLTEsIGFzc3VtZSA9IC0xOwoJCWZvcihpbnQgaSA9IGZsYWcubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHsKCQkJaWYoZmxhZ1tpXSA9PSBEQU5HRVIpIHsKCQkJCWFzc3VtZSA9IGkgLSAxOwoJCQl9CgkJfQoJCWZvcihpbnQgaSA9IDA7IGkgPCBmbGFnLmxlbmd0aDsgKytpKSB7CgkJCWlmKGZsYWdbaV0gPT0gU0FGRSkgewoJCQkJbGVhc3QgPSBpOwoJCQl9CgkJfQoJCWlmKGFzc3VtZSA9PSAtMSkgewoJCQlhc3N1bWUgPSBmbGFnLmxlbmd0aCAtIDE7CgkJfQoJCWlmKGxlYXN0ID09IGFzc3VtZSAmJiBsZWFzdCA9PSBmbG9vcikgewoJCQlyZXR1cm4gMDsKCQl9CgkJaWYocmVtYWluaW5nID09IDAgfHwgbGVhc3QgPT0gYXNzdW1lKSB7CgkJCXJldHVybiAtMTsKCQl9CgkJaW50IHQxID0gLTEsIHQyID0gLTE7CgkJaWYocmVtYWluaW5nID4gMSkgewoJCQlpbnQgbWlkID0gKGxlYXN0ICsgYXNzdW1lICsgMSkgLyAyOwoJCQlpZihtaWQgPD0gZmxvb3IpIHsKCQkJCWZsYWdbbWlkXSA9IFNBRkU7CgkJCQlpbnQgdCA9IGd1ZXNzKGZsYWcsIGZsb29yLCByZW1haW5pbmcpOwoJCQkJaWYodCA9PSAtMSkgewoJCQkJCXQxID0gLTE7CgkJCQl9IGVsc2UgewoJCQkJCXQxID0gMSArIHQ7CgkJCQl9CgkJCQlmbGFnW21pZF0gPSAwOwoJCQl9IGVsc2UgewoJCQkJZmxhZ1ttaWRdID0gREFOR0VSOwoJCQkJaW50IHQgPSBndWVzcyhmbGFnLCBmbG9vciwgcmVtYWluaW5nIC0gMSk7CgkJCQlpZih0ID09IC0xKSB7CgkJCQkJdDIgPSAtMTsKCQkJCX0gZWxzZSB7CgkJCQkJdDIgPSAxICsgdDsKCQkJCX0KCQkJCWZsYWdbbWlkXSA9IDA7CgkJCX0KCQl9IGVsc2UgewoJCQlpbnQgbWlkID0gbGVhc3QgKyAxOwoJCQlpZihtaWQgPD0gZmxvb3IpIHsKCQkJCWZsYWdbbWlkXSA9IFNBRkU7CgkJCQlpbnQgdCA9IGd1ZXNzKGZsYWcsIGZsb29yLCByZW1haW5pbmcpOwoJCQkJaWYodCA9PSAtMSkgewoJCQkJCXQxID0gLTE7CgkJCQl9IGVsc2UgewoJCQkJCXQxID0gMSArIHQ7CgkJCQl9CgkJCQlmbGFnW21pZF0gPSAwOwoJCQl9IGVsc2UgewoJCQkJZmxhZ1ttaWRdID0gREFOR0VSOwoJCQkJaW50IHQgPSBndWVzcyhmbGFnLCBmbG9vciwgcmVtYWluaW5nIC0gMSk7CgkJCQlpZih0ID09IC0xKSB7CgkJCQkJdDIgPSAtMTsKCQkJCX0gZWxzZSB7CgkJCQkJdDIgPSAxICsgdDsKCQkJCX0KCQkJCWZsYWdbbWlkXSA9IDA7CgkJCX0KCQl9CgkJaWYodDEgPT0gLTEpIHsKCQkJcmV0dXJuIHQyOwoJCX0gZWxzZSBpZih0MiA9PSAtMSkgewoJCQlyZXR1cm4gdDE7CgkJfQoJCXJldHVybiB0MSA+IHQyID8gdDEgOiB0MjsKCX0KCQoJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewoJCWZvcihpbnQgZmxvb3IgPSAxOyBmbG9vciA8PSAxMDA7ICsrZmxvb3IpIHsKCQkJaW50W10gZmxhZyA9IG5ldyBpbnRbMTAyXTsKCQkJZm9yKGludCBpID0gMDsgaSA8IGZsYWcubGVuZ3RoOyArK2kpIHsKCQkJCWZsYWdbaV0gPSAwOwoJCQl9CgkJCWZsYWdbMF0gPSBTQUZFOwoJCQlmbGFnWzEwMV0gPSBEQU5HRVI7CgkJCWludCB0aW1lcyA9IGd1ZXNzKGZsYWcsIGZsb29yLCAyKTsKCQkJU3lzdGVtLm91dC5wcmludGxuKGZsb29yICsgIj0+IiArIHRpbWVzKTsKCQl9Cgl9Cn0=