春招模拟赛第八场|微众银行|2023.04.12机试
- Status
- Done
- Rule
- IOI
- Problem
- 3
- Start at
- 2023-4-20 19:00
- End at
- 2023-4-20 21:00
- Duration
- 2 hour(s)
- Host
- Partic.
- 37
You cannot submit for this problem because the contest is ended. You can click "Open in Problem Set" to view this problem in normal mode.
塔子哥参加ACM竞赛的过程中遇到过各种各样的计数题。唯独二进制计数题他整不明白。这不,今天WZ银行恰好又出了一道这种题,他还是依旧大脑空白。你可以帮助他吗?
塔子哥拿到了四个非负整数L,R,X,Y,请计算有多少个非负整数N满足以下四个条件:
1.N的二进制表示中1的个数不小于L
2.N的二进制表示中1的个数不大于R
3.N和X的按位与为X
4.N和Y的按位或为Y
第一行有一个正整数T(1≤T≤1000),代表有多少组测试数据。接下来是T组测试数据,每组由一行构成。
每一组测试数据仅包含四个整数L,R,X,Y (0≤L≤R≤30,0≤X,Y≤230−1)
T行,每行输出一个整数,代表你求得的答案。
输入
1
2 4 1 3
输出
1
输入
2
2 3 8 62
3 5 20 61
输出
10
7
题解:位运算+组合计数
首先,考虑N&X=X,对于X二进制位中每一个为1的位置,N与其对应的位置也必须要为1,我们可以使用一个标记数组进行标记
其次,考虑N∣Y=Y,对于Y二进制位中每一个为0的位置,N与其对应的位置也必须要为0,我们可以使用一个标记数组进行标记
无解情况:上述标记的数字出现了冲突,则一定无解:同一个位置不可能既填1又填0
那么我们可以考虑一下对于有解情况的方案数:假设现在已经填了m个数字,其中有k个1,我们最终填写1的个数范围为[L,R]
本题属于以下题库,请选择所需题库进行购买