- 247's solution
-
P247's Solution
- @ 2026-4-5 11:26:21
当 时,内部为 当且仅当 ,答案为 。
当 时:
- 且 时答案为 , 且 时答案为 ,这部分的答案为 。
- 时拿掉一个二进制位 可以使得答案为 ,所有 位二进制数中每位为 的频率均为 ,一共 个 ,去掉 的情况后有 个,考虑 互换后这部分的答案为 个。
- 上面两部分求和得到 。
#include <bits/stdc++.h>
using namespace std;
long long p[32];
const int P = 998244353;
long long power(int x, long long y)
{
y %= P - 1;
long long ans = 1;
for (int i = 29; i >= 0; i--)
if (y & (1 << i)) ans = ans * p[i] % P;
return ans;
}
int main()
{
ios::sync_with_stdio(0);
p[0] = 2;
for (int i = 1; i <= 30; i++)
p[i] = p[i - 1] * p[i - 1] % P;
int T;
cin >> T;
while (T--)
{
long long n, k;
cin >> n >> k;
if (k == 0) cout << power(2, n) - 1 << '\n';
if (k == 1) cout << (n + 1) % P * (power(2, n) - 1) % P << '\n';
}
return 0;
}