1 条题解

  • 0
    @ 2025-9-4 21:59:16

    想象一下,如果我们询问 x=(0111)2x=(0111)_2,会返回什么呢?设 y=(cdef‾)2y=(\overline{cdef})_2:

    • 如果 c=0c=0,则 yy 计入答案;
    • 如果 c=1c=1,则 yy 不计入答案;

    因此返回的结果 rr 就是 {an}\{a_n\} 中满足 c=0c=0 的项的个数。也就是说,{an}\{a_n\} 中满足 c=1c=1 的项的个数为 n−rn-r,这一位对 a1+a2+…+ana_1+a_2+\ldots+a_n 的贡献是 8×(n−r)8 \times (n-r)。

    同理,我们可以用 44 次交互分别出 44 个二进制位对 a1+a2+…+ana_1+a_2+\ldots+a_n 的贡献。我们把 44 个贡献相加,就可以算出 a1+a2+…+ana_1+a_2+\ldots+a_n 的值了。

    #include <bits/stdc++.h>
    #include "conversion.h"
    using namespace std;
    int main()
    {
        int n = start();
        int s = 0;
        for (int i = 1; i <= 8; i <<= 1)
            s += i * (n - interact(15 - i));
        stop(s);
        return 0;
    }
    
    • 1

    信息

    ID
    9
    时间
    1000ms
    内存
    512MiB
    难度
    2
    标签
    递交数
    29
    已通过
    7
    上传者