题目大意
分析
因为
n
∗
m
n*m
n∗m超过了
1
e
10
1e10
1e10,所以针对每个输入的
x
x
x一个一个找并不现实。
于是想到打表。
然后由于题目里有&这个东西,于是想到数位DP。
然后寻找转移式,发现
当
d
p
[
i
]
=
1
dp[i]=1
dp[i]=1时,
d
p
[
i
−
(
1
<
<
j
)
]
=
1
(
i
>
=
1
<
<
j
)
dp[i-(1<<j)]=1(i>=1<<j)
dp[i−(1<<j)]=1(i>=1<<j)。
于是能写出如下打表代码段
for (i=mx;i>=0;i--)
for (j=0;j<20;j++)
if (dp[i]&&(i>>j & 1))
dp[i-(1<<j)]=1;
然后再 O ( 1 ) O(1) O(1)输出每个 x x x对应的 a n s ans ans即可。