1 条题解

  • 3
    @ 2024-10-13 23:29:53

    想象一下,如果我们询问 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 的项的个数为 nrn-r,这一位对 a1+a2++ana_1+a_2+\ldots+a_n 的贡献是 8×(nr)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

    Interactive Problem Test 2: And-Sum Conversion

    信息

    ID
    34
    时间
    1000ms
    内存
    512MiB
    难度
    2
    标签
    递交数
    13
    已通过
    3
    上传者