传送门

题意:给你一个n和x,问你是否存在一个m,使

n&(n+1)&(n+2)&...&m=x如果存在输出最小的m,否则输出-1。

思路:因为是与运算,那么与之后的结果一定不会大于n,所以如果m>n就可以直接输出-1.

而且数据范围比较大,那么我们可以把n转化为二进制数。

假如是90转换为二进制数就是1011010,

&n+1即1011010&1011011=1011010,

&n+2即1011010&1011100=1011000,

&n+3即1011000&1011101=1011000,

&n+4即1011000&1011110=1011000,

&n+5即1011000&1011111=1011000,

&n+6即1011000&1100000=1000000,

好那么到这里我们可以发现,每次与的结果只能为从高位开始的1的连续子区间的前缀

(比如1011010可以得到1011000但是不能得到1000010(如果要前面的1为0那么后面的1一定会提前为0)

也不能得到1010000(如果要第三个位置为1第四个为0那么与的数第四个位置也要为0,但是如果为0那么就会进位导致第三位置的1也会0))

并且,而且二进制数如果x中为1但是n不为1那么无论怎么加也不能使当前位为1.

于是不能得到的情况就处理完了,现在就看如何得到最小的m。

那么我们也可以从上图发现,最小的m就是从高到低起,x的二进制位和n的二进制不同的i前面一位(比如要得到1000000,那么与1011000不同位为第3位,那么就要往前挪一位&1100000就可以得到)。

代码:


#include<cstdio>
#include <iostream>
#include <algorithm>
#include <string.h>
#include <string>
#include <math.h>
#include<vector>
#include<queue>
#include<map>
#define sc_int(x) scanf("%d", &x)
#define sc_ll(x) scanf("%lld", &x)
#define pr_ll(x) printf("%lld", x)
#define pr_ll_n(x) printf("%lld\n", x)
#define pr_int_n(x) printf("%d\n", x)
#define ll long long
using namespace std;const int N=1000000+100;
ll n ,m,h;
int a[N],b[N];void solve()
{for(int i =1;i<=70;i++)//初始化a[i]=b[i]=0;ll x,y;cin>>x>>y;n=x,m=y;if(m>n){cout<<"-1\n";return ;}    if(m==n){cout<<m<<endl;return ;}int sizea=1,sizeb=1;for(int i =1;i<=70;i++)//从小到大转换为二进制到数组里面{if(n%2){a[i]=1;sizea=i;}if(m%2){b[i]=1;sizeb=i;}n/=2,m/=2;}    bool ii=0;for(int i =max(sizea,sizeb);i>=1;i--){if(a[i]!=b[i]){if(b[i]){cout<<"-1\n";return ;                    }else  ii=1;//前缀只能到这个位置}else{if(a[i]==1&&ii) //后面有1并且前面有0了{cout<<"-1\n";return ;                    }}}for(int i =max(sizea,sizeb);i>=1;i--)//找连续的1的区间{int j=i;if(a[j]==1){int sum=0;while(a[j]==1){if(b[j]==0&&j>=1) sum++;j--;}if(sum!=i-j&&sum!=0){cout<<"-1\n";return ;                    }}i=j;}for(int i =max(sizea,sizeb);i>=1;i--)//从最高位找不同的{if(a[i]!=b[i]&&a[i]==1){b[i+1]=1;break;}}ll res=0,t=1;for(int i =1;i<=70;i++)    {if(b[i]==1)res+=t;t*=2;}cout<<res<<endl;return ;
}int main()
{int t;sc_int(t);while(t--)solve();return 0;
}/*101010
011111
1010 1011 1100 1101 1110 11111010
1000*/

C. Interesting Sequence相关推荐

  1. 【CF 比赛记录】Roye_ack的艰难上分日常(35)

    目录 #792 Div1+Div2 AC  A1. Digit Minimization #Edu 129 Div2 !A2. Game with Cards #795 Div2 AC  A3. Be ...

  2. The 2022 ICPC Asia Regionals Online Contest (II) A、B、E、F、G、J、L

    文章目录 A-Yet Another Remainder 题目 题解 B-Non-decreasing Array 题目 题解 E-An Interesting Sequence 题目 题解 F-In ...

  3. The 2022 ICPC Asia Regionals Online Contest (II) 2022ICPC第二场网络赛 ABEFGJKL题解

    文章目录 A Yet Another Remainder[费马小定理] B Non-decreasing Array[线性DP] E An Interesting Sequence[签到] F Inf ...

  4. Codeforces Round #843 (Div. 2) 口胡日记(青大蒟蒻日常掉大分)

    我的主页 A1. Gardener and the Capybaras (easy version) 思路 O(n2)暴力,枚举分裂成三部分的两个断点,提取三个部分,按照题意模拟即可. A1题代码 A ...

  5. I - Interesting Permutation Gym - 102394I(排列组合)

    题意: 纯数题 1≤i≤n, fi=max{a1,a2,-,ai}; 1≤i≤n, gi=min{a1,a2,-,ai}; 1≤i≤n, hi=fi−gi. 数列a是一个排列,问多少种排列方式满足h数 ...

  6. UVA10534 Wavio Sequence【LIS+DP】

    Wavio is a sequence of integers. It has some interesting properties. • Wavio is of odd length i.e. L ...

  7. Gym - 102394I Interesting Permutation(思维)

    题目链接:https://vjudge.net/contest/398708#problem/I DreamGrid has an interesting permutation of 1,2,-,n ...

  8. ZOJ 3952 Fibonacci Sequence Chicken Edition

    Year 2017 is the year of chicken, so in this problem we introduce you an interesting programming lan ...

  9. Day 12 C. Interesting Story

    Problem: Stephen Queen wants to write a story. He is a very unusual writer, he uses only letters 'a' ...

最新文章

  1. Python---哈夫曼树---Huffman Tree
  2. 接口测试 2021 接口测试白皮书 欢迎下载阅读
  3. MYSQL.版本查看-LINUX
  4. Linux 下搭建 Scala 开发环境
  5. 关于scanf和的问题
  6. 二叉树的相关操作(c语言)
  7. POJ1426-Find The Multiple-深度优先搜索BFS
  8. 关于java 中 的 null。
  9. PHICOMM(斐讯)N1盒子 - recovery模式救砖卡登录页LOGO卡1%卡4%卡26%
  10. 战投之王:蔡崇信、刘炽平和刘德的精密战争
  11. mysql 删除数据后myd_关于mysql 删除数据后(.MYD,MYI)物理空间未释放
  12. termux搭建局域网web服务器
  13. 手机查看企业qq邮件服务器,QQ企业邮箱怎么用?手机QQ邮箱收发邮件的方法
  14. R语言dplyr入门到进阶
  15. FTT暴雷加密熊市雪上加霜?如何对抗系统风险
  16. 快速提高pip安装速度!一劳永逸
  17. lt;html xmlns=http://www.w3.org/1999/xhtmlgt;
  18. Statistics Foundations: 2 统计基础:2 Lynda课程中文字幕
  19. 模板模式详解、模板模式怎么用、模板模式模板代码
  20. 【LTE基础知识】LTE信令流程之开机附着、去附着流程分析

热门文章

  1. Python爬虫:逆向分析某云音乐加密参数
  2. licode服务器处理流程
  3. 用Python写前端是什么体验?
  4. iOS 学习之旅 - OC 篇
  5. Node.js 单页应用
  6. android 位于底部的tab,GitHub - DevinFu/BottomTabBar: Android应用中位于底部的tab栏
  7. pathlib库使用手册
  8. php printer.dll扩展,php_printer.dll,下载,简介,描述,修复,等相关问题一站搞定_DLL之家...
  9. C++学习(二一一)英伟达和七彩虹
  10. sunos与linux区别,linux与solaris的联系与区别总结:命令的异同