这道题思路很简单,我们拆分考虑每一个二进制位
由于有些二进制位需要饲料有些不用,我们就直接把所有动物的编号按位或起来,并得到饲料列表(其实饲料列表不用计算,记录一下对应的位就好了。
从高往低考虑每一位,若这一位已经买过饲料,或者指南上面没有提到需要这一位买饲料,那么这一位就是任选的,计任选的位有个
把所有任选的位组合, 可以得到 个答案
再减去原有的 n 个就可以了
但是
哪怕开了 long long 或者unsigned long long, 由于最后一个数据需要输出,也是不够的
所以特判一下呗。。

特判
1 | if(k == 64) puts("18446744073709551616"); |
愉快解决
