这次的cf依旧掉分.....

A题和B题在不懈死磕下瞎搞出来了,不过还是被C题卡住了...

C. Mikasa

简述题意就是给定n和m,让n^0,n^1,n^2...,n^m,求着m+1个数中没有出现过的最小的非负整数.假设答案为x,则n^k=x,则k>m,我们还可以转化成n^x=k>m,也就是说我们要找一个最小的数x使得n^x>m

若n>m,不难发现x为0就满足题意.之后考虑n<=m的情况:我们考虑一个数比另一个数大在二进制上是什么体现,比如x>y,那么我们把他们都写成二进制数,那么一定存在一个位数使得在这个位数之前x与y的二进制数是相等的,在这个位数上x>y,即x=1,y=0,只要满足这个条件,这个位数之后随意,x一定大于y,那我们考虑这里的n^k>m的情况,我们可以先把n和m写成二进制数,对于k来说,我们要求它尽可能小,但n^k必须大于m,那我们就考虑n^k要在哪一位上大于m,对于n和m的每一位,从m开始讨论,若m这一位为1,则n^k无论如何都无法在这一位上实现大于m的目标,并且我们要求n^k要大于m,那么在这一位上n^k也必须是1,期望在之后的某一位上大于m的目标,所以无论n的这一位是0还是1,我们的k的这一位与n、的这一位异或必须是1,这样的k的这一位就是确定的。若m的这一位是0,若n=1,可以发现k=0,n^k=1>0,即可完成超越m的目标并且k也没有增大,这是我们优先选择的目标,因为在某一位上超越m之后,后面的位数无论怎样都可以,所以这样的位(m=0,n=1)在越靠前,我们得到的k就越小,我们可以从最高位往下扫来确定有没有这样的位数。考虑m=.0,n=0的情况,我们有两种选择,将k赋为0,没有增加k的值,但却只能在后面超越m,还有一种选择就是令k=1,在这一位上选择超越m,之后的就不用考虑了,很显然,若有多个这样的位的话,我们肯定是让前面这样的位为0,在最后一个这样的位上为1超越m,因为k的二进制中1越在后面肯定越小。致此整个分析过程结束,我们只需要做如下操作。

首先从最高位往下扫,看有没有m=0,n=1的位,若有,从最高位到这一位,若m=1,我们令构造k使得n^k=1,若m=0,令k=0,结束。

若无m=0,n=1的位,从最低位到最高位扫,看有没有m=0,n=0的位,是第一个扫到的位终点,重新从最高位开始扫到终点,重复上面的赋值法则。

//不等,不问,不犹豫,不回头.
#include<bits/stdc++.h>
#define _ 0
#define ls p<<1
#define db double
#define rs p<<1|1
#define RE register
#define P 1000000007
#define ll long long
#define INF 1000000000
#define get(x) x=read()
#define PLI pair<ll,int>
#define PII pair<int,int>
#define ull unsigned long long
#define put(x) printf("%d\n",x)
#define putl(x) printf("%lld\n",x)
#define rep(x,y,z) for(RE int x=y;x<=z;++x)
#define fep(x,y,z) for(RE int x=y;x>=z;--x)
#define go(x) for(RE int i=link[x],y=a[i].y;i;y=a[i=a[i].next].y)
using namespace std; inline int read()
{
int x=0,ff=1;
char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') ff=-1;ch=getchar();}
while(isdigit(ch)) {x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
return x*ff;
} int main()
{
// freopen("1.in","r",stdin);
int get(T);
while(T--)
{
int get(n),get(m);
if(n>m) {puts("0");continue;}
int id=-1,ans=0;
fep(i,30,0) //先找有没有m=0,n=1的位.
{
int s1=(m&1<<i)?1:0;
int s2=(n&1<<i)?1:0;
if(!s1&&s2) {id=i;break;}
}
if(id!=-1) //存在m=0,n=1的位数.
{
fep(i,30,id)
{
int s1=(m&1<<i)?1:0;
int s2=(n&1<<i)?1:0;
if(s1) ans+=(s1^s2)<<i;
}
}
else//不存在m=0,n=1的位数.
{
rep(i,0,30) //找最低位的m=0,n=0的位
{
int s1=(m&1<<i)?1:0;
int s2=(n&1<<i)?1:0;
if(!s1&&!s2) {id=i;break;}
}
fep(i,30,id)
{
int s1=(m&1<<i)?1:0;
int s2=(n&1<<i)?1:0;
if(s1) ans+=(s1^s2)<<i;
if(i==id) ans+=1<<i;
}
}
put(ans);
}
return (0^_^0);
}
//以吾之血,铸吾最后的亡魂.

Codeforces Round #735 (Div. 2)的更多相关文章

  1. Codeforces Round #735 (Div. 2) 题解

    比赛地址:https://codeforces.com/contest/1554. 只有 ABCD 的题解,E 不会. A 答案是 \(\max_i\{a_ia_{i+1}\}\).证明:(反证)如果 ...

  2. Codeforces Round #366 (Div. 2) ABC

    Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...

  3. Codeforces Round #354 (Div. 2) ABCD

    Codeforces Round #354 (Div. 2) Problems     # Name     A Nicholas and Permutation standard input/out ...

  4. Codeforces Round #368 (Div. 2)

    直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...

  5. cf之路,1,Codeforces Round #345 (Div. 2)

     cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅.....   ...

  6. Codeforces Round #279 (Div. 2) ABCDE

    Codeforces Round #279 (Div. 2) 做得我都变绿了! Problems     # Name     A Team Olympiad standard input/outpu ...

  7. Codeforces Round #262 (Div. 2) 1003

    Codeforces Round #262 (Div. 2) 1003 C. Present time limit per test 2 seconds memory limit per test 2 ...

  8. Codeforces Round #262 (Div. 2) 1004

    Codeforces Round #262 (Div. 2) 1004 D. Little Victor and Set time limit per test 1 second memory lim ...

  9. Codeforces Round #371 (Div. 1)

    A: 题目大意: 在一个multiset中要求支持3种操作: 1.增加一个数 2.删去一个数 3.给出一个01序列,问multiset中有多少这样的数,把它的十进制表示中的奇数改成1,偶数改成0后和给 ...

随机推荐

  1. 洛谷P1583——魔法照片(结构体排序)

    https://www.luogu.org/problem/show?pid=1583#sub 题目描述 一共有n(n≤20000)个人(以1--n编号)向佳佳要照片,而佳佳只能把照片给其中的k个人. ...

  2. qsc oj-17 喵哈哈村的排队

    http://qscoj.cn/problem/17/ 喵哈哈村的排队 描述 有一堆喵哈哈村的村民们在排队,他们从队列的尾部开始标号,标号为1的村民站在最后面,标号为n的村民站在队列的最前面,而且每个 ...

  3. gentoo(贱兔) Linux作业系统的基本使用

    emerge是gentoo linux的portage包管理器的命令行工具emerge的基础使用:emerge 软件包名:安装某软件包 emerge nanoemerge --ask 软件包名:交互式 ...

  4. PHP操作用户提交内容时需要注意的危险函数

    对于我们的程序开发来说,用户的输入是解决安全性问题的第一大入口.为什么这么说呢?不管是SQL注入.XSS还是文件上传漏洞,全部都和用户提交的输入参数有关.今天我们不讲这些问题,我们主要探讨下面对用户的 ...

  5. Jmeter系列(15)- 常用断言之大小断言

    大小断言 大小断言验证响应数据size大小,它的作用范围有主Sample与子Sample:适用场景,判断附件下载的大小,比如项目安装包 完整响应:全部响应信息 响应头:响应头信息,比如http协议的头 ...

  6. 一文让你彻底理解SELECT语句的执行逻辑

    正常情况下SELECT的书写顺序和执行顺序: 书写顺序: SELECT>FROM >WHERE>GROUP BY>HAVE>ORDER BY 执行顺序: FROM > ...

  7. Python Software Foundation

    The Python Software Foundation (PSF) is a 501(c)(3) non-profit corporation that holds the intellectu ...

  8. P4780-Phi的反函数【dfs】

    正题 题目链接:https://www.luogu.com.cn/problem/P4780 题目大意 给出\(n\),求一个最小的\(x\)满足\(\varphi(x)=n\). 若不存在或者大于\ ...

  9. P3190-[HNOI2007]神奇游乐园【插头dp】

    正题 题目链接:https://www.luogu.com.cn/problem/P3190 题目大意 \(n*m\)的网格上有权值,求一条权值和最大的不交回路. \(1\leq n\leq 100, ...

  10. oeasy教您玩转vim - 53 - # 批量替换

    查找细节 回忆上节课内容 我们温习了关于搜索的相关内容 /正向,?反向 n保持方向,N改变方向 可以设置 是否忽略大写小写 是否从头开始查找 是否高亮显示 还有一些正则表达式的使用方法 行头行尾 ^$ ...