#include <bits/stdc++.h>
using namespace std;
#define N 100
void display(bool a[]) {
int i=0;
while(i
<31) printf("%2d ",a
[i
++]); }
void assign(bool a[],int zeros) {
for(int i=0;i<31;i++)
(i<zeros)?a[i] = 0:a[i] = 1;
}
int main() {
bool a[31];
// header
for(int i
=0;i
<31;i
++) printf("%2d ",i
); int max_probes = 0;
for(int iteration = 1;iteration <= N;iteration++) {
assign(a,zeros);
sort(a,a+31);
int low,high,mid,ans;
std::vector<int> seq;
low = 0;
high = 31;
while(low < high) {
mid
= low
+ floor((high
- low
) / 2); seq.push_back(mid);
if(a[mid] == 0) {
low = mid + 1;
ans = low;
if(a[mid + 1] == 1) break;
} else {
high = mid;
ans = high;
if(mid > 0)
if(a[mid - 1] == 0) break;
}
}
display(a);
printf(" | probes=%d ",seq.
size()); for(auto e
:seq
) printf("%d ",e
); //if(ans == 15) printf("\nHHH=-------------\n");
max_probes = max(max_probes,(int)(seq.size()));
seq.clear();
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgTiAxMDAKdm9pZCBkaXNwbGF5KGJvb2wgYVtdKSB7CiAgaW50IGk9MDsKICB3aGlsZShpPDMxKSBwcmludGYoIiUyZCAiLGFbaSsrXSk7Cn0Kdm9pZCBhc3NpZ24oYm9vbCBhW10saW50IHplcm9zKSB7CiAgZm9yKGludCBpPTA7aTwzMTtpKyspCiAgICAoaTx6ZXJvcyk/YVtpXSA9IDA6YVtpXSA9IDE7Cn0KaW50IG1haW4oKSB7CiAgc3JhbmQodGltZShOVUxMKSk7CiAgYm9vbCBhWzMxXTsKICAvLyBoZWFkZXIKICBmb3IoaW50IGk9MDtpPDMxO2krKykgcHJpbnRmKCIlMmQgIixpKTsKICBwcmludGYoIlxuXG4iKTsKICBpbnQgbWF4X3Byb2JlcyA9IDA7CiAgZm9yKGludCBpdGVyYXRpb24gPSAxO2l0ZXJhdGlvbiA8PSBOO2l0ZXJhdGlvbisrKSB7CiAgICBpbnQgemVyb3MgPSByYW5kKCklMzI7CiAgICBhc3NpZ24oYSx6ZXJvcyk7CiAgICBzb3J0KGEsYSszMSk7CiAgICBpbnQgbG93LGhpZ2gsbWlkLGFuczsKICAgIHN0ZDo6dmVjdG9yPGludD4gc2VxOwogICAgCiAgICBsb3cgPSAwOwogICAgaGlnaCA9IDMxOwogICAgd2hpbGUobG93IDwgaGlnaCkgewogICAgICBtaWQgPSBsb3cgKyBmbG9vcigoaGlnaCAtIGxvdykgLyAyKTsKICAgICAgc2VxLnB1c2hfYmFjayhtaWQpOwogICAgICBpZihhW21pZF0gPT0gMCkgewogICAgICBsb3cgPSBtaWQgKyAxOwogICAgICBhbnMgPSBsb3c7CiAgICAgICAgaWYoYVttaWQgKyAxXSA9PSAxKSBicmVhazsgCiAgICAgIH0gZWxzZSB7CiAgICAgIGhpZ2ggPSBtaWQ7CiAgICAgIGFucyA9IGhpZ2g7CiAgICAgIGlmKG1pZCA+IDApCiAgICAgICAgaWYoYVttaWQgLSAxXSA9PSAwKSBicmVhazsKCiAgICAgIH0KICAgIH0KCiAgICBkaXNwbGF5KGEpOwogICAgcHJpbnRmKCIgfCBwcm9iZXM9JWQgICIsc2VxLnNpemUoKSk7CiAgICBmb3IoYXV0byBlOnNlcSkgcHJpbnRmKCIlZCAiLGUpOwogICAgcHJpbnRmKCIgfCBhdCA9ICVkdGhcbiIsYW5zKTsKICAgIC8vaWYoYW5zID09IDE1KSBwcmludGYoIlxuSEhIPS0tLS0tLS0tLS0tLS1cbiIpOwogICAgbWF4X3Byb2JlcyA9IG1heChtYXhfcHJvYmVzLChpbnQpKHNlcS5zaXplKCkpKTsKICAgIHNlcS5jbGVhcigpOwkKICB9CiAgcHJpbnRmKCIlZFxuIixtYXhfcHJvYmVzKTsKfQ==