ABC-356D题解
ABC-356D题解
注:借鉴官方题解
题意
给出
其中
思路
显然可以发现,对于第
于是,本题转化成了,对于每个满足
首先,
其次,
(可以写出二进制的形式加深理解)
因此,在
而对于一个数
因此,
所以,对于非负整数
再来讨论剩下的不足
设
则如果
否则无贡献。
最后统计答案。
Code
#include <bits/stdc++.h>
#define endl '\n'
#define int long long
using namespace std;
const int N=2e5+10;
const int inf=0x3f3f3f3f3f3f3f3f;
const int p=998244353;
int n,m;
int ans;
int fun(int i,int n)
{
int p2=(1ll<<i);
int k=n/(2*p2);
int res=k*p2;
int l=n%(2*p2);
if(l>=p2) res+=(l-p2+1);
return res%p;
}
signed main()
{
cin.tie(0);
cout.tie(0);
ios::sync_with_stdio(false);
cin>>n>>m;
for(int i=0;i<60;i++)
{
if((1ll<<i)&m)
{
ans+=fun(i,n);
ans%=p;
}
}
cout<<ans;
return 0;
}