题解:P9223 「PEOI Rd1」异或(xor)
Herobrine6265 · · 题解
题目传送门
思路
Step 1:暴力
没啥说的
时间复杂度
期望得分:10pts
Step 2:观察分析
首先显然的是最后的结果只与
记
对第
则第
则最终答案为
计算上式的时间复杂度为
显然的,若第
若第
对
综上总时间复杂度为
AC Code
温馨提示:记得及时取模
#include <iostream>
#define ll long long
using namespace std;
const int mod = 998244353;
ll pow2[60] = {1};
signed main()
{
ios::sync_with_stdio(false);
int t;
cin >> t;
for (int i = 1; i < 60; i++)
pow2[i] = (pow2[i - 1] << 1);
while (t--)
{
ll n, m, ans = 0;
cin >> n >> m;
for (int j = 0, cnt1, cnt2; pow2[j] <= max(m, n); j++)
{
cnt1 = (m + 1) / pow2[j + 1] % mod * pow2[j] % mod + max(0ll, (m + 1) % pow2[j + 1] - pow2[j]) % mod;
cnt1 %= mod;
cnt2 = (n + 1) / pow2[j + 1] % mod * pow2[j] % mod + max(0ll, (n + 1) % pow2[j + 1] - pow2[j]) % mod;
cnt2 %= mod;
ans += (m - cnt1) % mod * (pow2[j] % mod) % mod * cnt2 % mod;
ans %= mod;
ans += (n - cnt2) % mod * (pow2[j] % mod) % mod * cnt1 % mod;
ans %= mod;
}
cout << ans << '\n';
}
return 0;
}