1 条题解

  • 0
    @ 2026-4-11 15:46:08

    一、核心公式(标程唯一逻辑)

    这段代码的功能只有一行: 对于每组输入 n,kn, k,输出答案:

    ans=k×2n\boldsymbol{ans = k \times 2^n}

    在代码中用位运算左移实现: k << n 等价于数学公式

    k×2nk \times 2^n

    二、位运算原理

    • 左移 11x<<1=x×2x << 1 = x \times 2
    • 左移 nnx<<n=x×2nx << n = x \times 2^n

    标程直接用 k << n 代替乘法,速度更快。


    三、标程代码逐行解释

    #include <iostream>
    using namespace std;
    
    int main() {
        ios::sync_with_stdio(false);
        cin.tie(0);  // 加速 cin/cout,避免大数据超时
        
        int T;
        cin >> T;    // 输入测试用例组数
        while (T--) {
            long long n, k;    // 使用 long long 防止溢出
            cin >> n >> k;    // 输入每组的 n, k
            cout << (k << n) << '\n';  // 输出 k * 2^n
        }
        return 0;
    }
    

    四、为什么要用 long long

    因为 2n2^n 增长极快,例如:

    • n=30n=302301092^{30} \approx 10^9
    • n=60n=6026010182^{60} \approx 10^{18}

    int 只能存到 2×1092\times10^9,必须用 long long(64位整数)。


    五、时间复杂度

    • 每组 O(1)O(1)
    • 总复杂度 O(T)O(T)

    六、等价数学写法

    你也可以写成这样,结果完全一样:

    cout << k * (1LL << n) << '\n';
    

    总结

    • 功能:计算 k×2nk \times 2^n
    • 实现:位运算 k << n
    • 注意:必须用 long long 防溢出
    • 1

    信息

    ID
    6480
    时间
    1000ms
    内存
    256MiB
    难度
    1
    标签
    递交数
    0
    已通过
    0
    上传者