[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}\)

posted @ 2021-01-28 21:29  雪落た兮赏翩舞  阅读(47)  评论(0编辑  收藏  举报