• 对于 k=0k = 0 的情况,只有当 x=yx = y 时,表达式值为 11,否则为 00,所以和为 2n12 ^ n - 1

  • 对于 k=1k = 1 的情况,通过分析二进制位的性质,推导出通项公式为 (n+1)×2nn1(n + 1) \times 2 ^ n - n - 1

AC code:

#include <bits/stdc++.h>
using namespace std;
const int MOD = 998244353;
#define ll long long

ll qpow(ll a, ll b, ll mod) {
    ll res = 1;
    while (b) {
        if (b & 1) res = res * a % mod;
        a = a * a % mod, b >>= 1;
    }
    return res;
}

int main() {
    int T;
    cin >> T;
    while (T--) {
        ll n, k;
        cin >> n >> k;
        if (k == 0) {
            cout << (qpow(2, n, MOD) - 1 + MOD) % MOD << endl;
        } else {
            cout << ((((n % MOD) + 1) % MOD * qpow(2, n, MOD) % MOD) - (n % MOD) - 1 + MOD) % MOD << endl;
        }
    }
    return 0;
}