码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 网课:第二章模拟、枚举与贪心---兔子的区间密码


    链接:登录—专业IT笔试面试备考平台_牛客网
    来源:牛客网
     

    题目描述

    有一只可爱的兔子被困在了密室了,密室里有两个数字,还有一行字:
    只有解开密码,才能够出去。
    可爱的兔子摸索了好久,发现密室里的两个数字是表示的是一个区间[L,R]
    而密码是这个区间中任意选择两个(可以相同的)整数后异或的最大值。
    比如给了区间[2,5] 那么就有2 3 4 5这些数,其中 2 xor 5=7最大 所以密码就是7。
    兔子立马解开了密室的门,发现门外还是一个门,而且数字越来越大,兔子没有办法了,所以来求助你。
    提示:异或指在二进制下一位位比较,相同则 0 不同则 1
    例如2=(010)22=(010)_22=(010)2​ 5=(101)25=(101)_25=(101)2​
    所以2 xor 5=(111)2=75=(111)_2=75=(111)2​=7

    输入描述:

    第一行一个数 T,表示数据组数。
    接下来 T 行,每行两个数 L,R, 表示区间[L,R]。

    输出描述:

    输出共T行每行一个整数,表示[L,R]的密码。

    示例1

    输入

    5
    1 10
    2 3
    3 4
    5 5
    2 5

    输出

    15
    1
    7
    0
    7

    备注:

    对于30%的数据 
    1  ≤ T ≤ 10 
    0 ≤ L ≤ R ≤ 100
    对于另外10%的数据 
    L=R
    对于70%的数据 
    1 ≤ T ≤ 10 
    0 ≤ L ≤ R ≤ 50000
    对于100%的数据 
    1 ≤ T ≤ 10000 
    0 ≤ L ≤ R ≤ 1018
    (对于100%的数据) 输入数据较大,请使用快速读入。

    做法

    这题也是挺巧妙的,完全没想到,只能说学习学习吧。

    从第一位开始对比 l 和 r 的二进制数,直到遇到不同的位,构造两个二进制数,一个前几位相同的加上0剩下的全是1,另一个前几位相同的加上1剩下全是0。构造的两个二进制数都在 l 和 r 的范围内,且异或值最大

    1. #include<bits/stdc++.h>
    2. using namespace std;
    3. int t;
    4. long long l,r;
    5. long long ksm(int a,int b) {//快速幂
    6. long long tmp=a,ans=1;
    7. while(b){
    8. if( (b & 1) == 1) ans*=tmp;
    9. tmp*=tmp;
    10. b>>=1;
    11. }
    12. return ans;
    13. }
    14. long long read(){//快读
    15. long long x=0;
    16. int f=1;
    17. char ch=getchar();
    18. while(ch<'0'||ch>'9'){
    19. if(ch=='-') f=-1;
    20. ch=getchar();
    21. }
    22. while(ch>='0'&&ch<='9'){
    23. x=x*10+ch-'0';
    24. ch=getchar();
    25. }
    26. return x*f;
    27. }
    28. int main(){
    29. scanf("%d",&t);
    30. while(t--){
    31. l=read();
    32. r=read();
    33. if(l==r){
    34. cout<<0<<endl;
    35. continue;
    36. }
    37. string a,b;
    38. while(r){
    39. b+=r%2+'0';
    40. r/=2;
    41. a+='0';
    42. }
    43. int cnt=0;
    44. while(l){
    45. a[cnt++]=l%2+'0';
    46. l/=2;
    47. }
    48. int idex;
    49. for(int i=a.size()-1;i>=0;i--){
    50. if(a[i]!=b[i]) {
    51. idex=i;
    52. break;
    53. }
    54. }
    55. for(int i=idex-1;i>=0;i--){
    56. a[i]='1';
    57. b[i]='0';
    58. }
    59. long long ans=0;
    60. for(int i=0;i<a.size();i++){
    61. if(a[i]!=b[i]) ans+=ksm(2,i);
    62. }
    63. cout<<ans<<endl;
    64. }
    65. }

    wa的原因:

    没用快速幂

  • 相关阅读:
    【jQuery】jQuery中如何发送ajax请求以及解决跨域问题_10
    PyG自定义数据集学习笔记(持续更新
    LLM - 使用 Ollama + OpenWebUI 在 Linux 服务器中高效部署大语言模型
    gcc编译介绍
    分析 SpringBoot 底层机制【Tomcat 启动分析 +Spring 容器初始化 +Tomcat 如何关联 Spring 容器 】
    Cypress环境变量
    适用于90%网剧、网大的最新备案流程解析
    阿里云邮件推送配置教程:有哪些关键步骤?
    手写一个摸鱼神器:使用python手写一个看小说的脚本,在ide中输出小说内容,同事直呼“还得是你”
    线性表——顺序表和链表
  • 原文地址:https://blog.csdn.net/2301_80718054/article/details/138920463
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号