Magic题解
Magic题解
题意简述:
给定
需要计算:
数据范围:
分析
这个数据范围启发我们设计一个带
如果我们设
则我们要求解的答案是:
所以问题转化为求解
关于异或的问题,不难想到使用字典树进行求解,设我们已经将所有的
数据范围是允许我们将求解每一个
这启发我们设计函数solve(s,t)
表示对于
设
对于答案的计算,可以将其分为两部分:可以在当前位解决的和留在后续解决的。
则我们设指针
分类讨论:
。此时,我们若想要保持 的可能,就需要让 的第 位为1,也即我们填上 ,此时我们无法计算出答案 ,类比情况一,填上 ,此时我们将 填为 ,当填为 时,第 位无论填什么都可以对答案产生贡献,所以直接累加上 的贡献并将 填为 即可。 ,类比情况三,可以得到算上 的贡献然后将 填为0即可。
核心代码:
int solve(int s,int tt){//在trie中查找与s异或比t大的数的数量
int p=1,ans=0;
for(int i=60;i>=0;i--){
if(!p)return ans;
int x=(s>>i)&1;
if((tt>>i)&1){
p=t[p][x^1];
}
else{
ans+=siz[t[p][x^1]];
p=t[p][x];
}
}
return ans;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!