1 条题解

  • 0
    @ 2026-9-30 12:42:50

    C++ :

    
    #include <cstdio>
    typedef long long ll;
    /* Sn 长度 = 2^n - 1;位置 k(1-based)
       若 k == mid -> '1';若 k < mid -> 递归 Sn-1 的 k;否则 -> invert(Sn-1 的 mid2 - k) */
    int main(){
        int T; if(scanf("%d", &T) != 1) return 0;
        while(T--){
            int n; ll k;
            scanf("%d %lld", &n, &k);
            int level = n, flip = 0;
            while(level > 1){
                ll len = (1LL << level) - 1;
                ll mid = (len + 1) / 2;
                if(k == mid) break;
                if(k > mid){
                    k = len - k + 1;
                    flip ^= 1;
                }
                level--;
            }
            int bit;
            if(level == 1){ bit = 0; }
            else { bit = 1; }
            printf("%d\n", bit ^ flip);
        }
        return 0;
    }
    
    
    • 1

    信息

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