1 条题解

  • 0
    @ 2026-11-1 19:55:49

    猜数(Guess the Number) 题解

    思路分析

    本题为函数式交互题。在 [1,n][1, n] 区间上对目标数 kk 进行二分查找:每次询问中点 mid = (l + r) / 2,调用 int res = Seniorious(mid):若 res == 0 说明 mid == k,直接返回 mid;若 res == 1 说明 k < mid,令 r = mid - 1;若 res == -1 说明 k > mid,令 l = mid + 1。由于 ⌈log⁡2(106)⌉=20\lceil \log_2(10^6) \rceil = 20,最多调用 2020 次 Seniorious 即可确定答案,且注意不要向标准输出打印任何内容。

    参考代码

    extern "C" int Seniorious(int);
    
    extern "C" int Chtholly(int n, int c)
    {
        int l = 1, r = n;
        while (l <= r)
        {
            int mid = l + (r - l) / 2;
            int res = Seniorious(mid);
            if (res == 0) return mid;
            if (res > 0) r = mid - 1;
            else l = mid + 1;
        }
        return l;
    }
    
    • 1

    信息

    ID
    8540
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者