#include <algorithm>#include <cstdio>#include <cstring>#define ll long longint cnt_broken = 0;int cnt_check = 0;int n, k;inline bool check(int h) { printf("now check:%d\n", h); ++cnt_check; if (cnt_broken == 2) { printf("You have no egg!\n"); return false; } if (h >= k) { ++cnt_broken; return true; } else { return false; }}inline bool assert_ans(int h) { if (h == k) { printf("You are Right using %d checks\n", cnt_check); return true; } else { printf("Wrong answer!\n"); return false; }}inline void guess1(int n) { for (int i = 1; i <= n; ++i) { if (check(i)) { assert_ans(i); return; } }}inline void guess2(int n) { int w = 0; for (w = 1; w * (w + 1) / 2 < n; ++w) ; for (int ti = w, nh = w;; --ti, nh += ti, nh = std::min(nh, n)) { if (check(nh)) { for (int j = nh - ti + 1; j < nh; ++j) { if (check(j)) { assert_ans(j); return; } } assert_ans(nh); return; } }}int main() { scanf("%d%d", &n, &k); int t; scanf("%d", &t); if (t == 1) { guess1(n); } else { guess2(n); } return 0;}注意:下述的“猜测数”为调用 check 函数的次数(即 的值);“猜测正确”的含义为 assert_ans 函数 return true(执行第 25 行所在分支)的情况;所有输入保证 )。
当输入为 "6 5 1" 时,猜测次数为 5;当输入为 "6 5 2" 时,猜测次数为 3。
不管输入的 和 具体为多少, 时的猜测数总是小于等于 时的猜测数。
不管 或 ,程序都一定会猜到正确结果。
函数 guess1 在运行过程中, 的值最多为( )。
函数 guess2 在运行过程中,最多使用的猜测次数的量级为( )。
当输入的 的时候,代码中 和 分别需要的猜测次数最多分别为( )。