【位运算】codeforces 1775 C. Interesting Sequence
1.【慢速加实现64位乘法】AcWing90 64位整数乘法
2.【位运算】codeforces 1775 C. Interesting Sequence
3.【异或运算】codeforces 1153 B. Dima and a Bad XOR题意
输入一个正整数
输入两个整数
题解
对于
对于
对于
成立,只需要找到一个能使 在二进制形式下全部位数都置为 的数即可,明显最小的符合要求的数就是 在二进制形式下最高位的 再左移一位的结果。比如: & 。 不成立,假设当前的值为 ,那么必须先与 进行与运算,那么可得知的是二进制形式下必定是低位先被置为 ,并且在进行位运算的时候,不可以使得 & 不再成立。所以只需要先算出 的最低位的 的位置 ,再判断出当 时 的 位是否为 即可,若是必定无解,否则答案就是 再异或上第一段从 起至最低位连续的 的结果。
参考代码
#include<bits/stdc++.h> #define IOS ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr); using namespace std; typedef long long ll; ll ans, n, m; int T = 1; void solve() { cin >> n >> m; if (n < m || n & m != m) ans = -1; else if (n == m) ans = n; else { int t = __builtin_ffsll(m); if (!m) { for (int i = 61; i >= 0; -- i) { if (n >> i & 1) { ans = 1LL << (i + 1); break; } } } else if (n >> t != m >> t || t > 1 && n >> t - 2 & 1) ans = -1; else { for (int i = t - 3; i >= 0; -- i) { if (n >> i & 1) { ans = 1LL << i + 1 | n >> t - 1 << t - 1; while (i >= 0 && n >> i & 1) { ans &= ~(1LL << i); -- i; } break; } } } } cout << ans << '\n'; } int main() { IOS cin >> T; while (T --) solve(); return 0; }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 【.NET】调用本地 Deepseek 模型