[CSP-S模拟测试]:最大或(数学)
题目传送门(内部题141)
输入格式
输入文件包含多组测试数据,第一行为一个正整数,表示数据组数。
接下来行,每行两个正整数。数据保证成立。
输出格式
输出行,每行一个正整数,为满足条件的进行或运算后的最大值,即输出。
样例
样例输入:
3
1 10
1023 1024
233 322
样例输出:
15
1023
511
数据范围与提示
对于的数据,满足。
对于的数据,满足。
对于的数据,满足。
题解
首先,将和都转化为二进制。
如果其在二进制下位数不一样,每一位都能是,那么答案一定是,其中为的二进制位数。
如果位数相等,从高往低第一个不一样的位往后都可以是,而前面的是什么就只能是什么了。
时间复杂度:。
期望得分:分。
实际得分:分。
代码时刻
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | #include<bits/stdc++.h> using namespace std; long long L,R,ans; int l[100],r[100],tl,tr; void get () { tl=tr=ans=0; while (L){l[++tl]=(L&1);L>>=1LL;} while (R){r[++tr]=(R&1);R>>=1LL;} } int main() { int T;scanf( "%d" ,&T); while (T--) { scanf( "%lld%lld" ,&L,&R); get (); if (tl==tr) { int res; for ( int i=tl;i;i--){ if (l[i]!=r[i]) break ;res=i;} ans=(1LL<<(res-1))-1; for ( int i=res;i<=tl;i++) if (l[i])ans+=(1LL<<(i-1)); } else ans=(1LL<<tr)-1; printf( "%lld\n" ,ans); } return 0; } |
rp++
分类:
数学
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· C# 13 中的新增功能实操
· Ollama本地部署大模型总结
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(4)
· langchain0.3教程:从0到1打造一个智能聊天机器人
· 2025成都.NET开发者Connect圆满结束