[Solution] 2020 CSP-S 动物园
众所周知,第二题是个签到题,但很明显能把\(1e6\)算成十万的我不配说这句话
废话不多说,题目链接
由题意可以很清楚的得到,答案其实只和\(u\),\(v\)对应的二进制数有关
将\(u\),\(v\)变为二进制,那么题目要求必须买的就买,即当前答案不变
如果题目未要求的则答案乘二,由题意得,给定的二进制数最多有\(k\)位
进行拆位处理即可
FOR(i,1,n) FOR(j,0,k-1) if(((num[i]>>j)&1)&&book[j]) vis[j]=1;
int ans=1;
FOR(i,0,k-1) {
if(!book[i]) ans*=2;
else if(vis[i]) ans*=2;
}
cout<<ans-n;
记得特判\(2^{64}\)