Educational Codeforces Round 134 (Div.2) D 题解
题目链接
题目大意
给定两组序列
其中,
定义
现在你可以随意编排
思路
以下位运算均是二进制。
由于按位与的运算结果是越来越小的,考虑从高位往低位贪心。
将结果的其中一位定为1之后,有一些序列
所以我们要从高位往低位贪心,有一位可以置为1,就把它置为1.
具体做法:暴力枚举,时间复杂度
void solve() {
cin >> n;
a = vector<int> (n);
b = vector<int> (n);
for (int i = 0; i < n; ++i) {
cin >> a[i];
}
for (int i = 0; i < n; ++i) {
cin >> b[i];
}
auto check = [&](int ans){
//ans是一个2的整次幂
map<int,int> cnt;
//下面两个for是 判断该位上、a序列的1和b序列的0的个数是否相等。
for(auto x:a) cnt[x & ans] += 1;
for(auto x:b) cnt[~x & ans] -= 1;
bool ok = true;
//如果有1,证明不等,ok置为false
for(auto [u,v] : cnt){
ok &= v == 0;
}
return ok;
};
int ans = 0;
for(int j = 30; j >= 0; --j){
//从高位向低位检查。
//写博客的时候的思考:如何把之前的已经确定了的1保存下来
//答:其实就保存在ans中。
if(check(ans | (1ll << j))){
ans |= 1 << j;
}
}
cout << ans << '\n';
}
分类:
题解
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具