CF1918C XOR-distance 题解
考虑对 \(a,b\) 进行二进制分解,在二进制位中进行计算。
设 \(a_i\) 表示数 \(a\) 二进制第 \(i\) 位。如果 \(a_i=b_i\),则不需要对 \(x_i\) 进行任何构造。但如果 \(a_i\) 不等于 \(b_i\),把 \(x_i\) 置为 \(1\) 只能改变 \(a_i\) 和 \(b_i\) 的大小关系,不能使其相等。
所以,我们从高位开始考虑,因为高位影响一定超过低位影响,所以不需要管对低位的影响,计算比较方便。首先找到第一个 \(a_i\) 与 \(b_i\) 的大小关系,根据进制位定义,可以推出高位影响一定超过低位影响,\(a\) 和 \(b\) 的大小关系就已经确定了。接下来,就是在下面的几位中,尽量使较大的数较小,较小的数较大即可,不需要管对低位的影响。
注意在修改时 \(x\) 的值不能超过 \(r\)。
时间复杂度为 \(O(t\log n)\),可以通过。
#include <bits/stdc++.h>
using namespace std;
long long t,n,m,r,a[200][2];
int main()
{
scanf("%lld",&t);
while(t--)
{
long long flag=-1,ans=0;
scanf("%lld%lld%lld",&n,&m,&r);
for(int i=0;i<=63;i++)
{
if(n&((long long)1<<i))a[i][0]=1;
else a[i][0]=0;
if(m&((long long)1<<i))a[i][1]=1;
else a[i][1]=0;
}
for(int i=63;i>=0;i--)
{
if(a[i][0]==a[i][1])continue;
if(flag==-1)
{
if(a[i][0]>a[i][1])flag=1;
else if(a[i][0]<a[i][1])flag=0;
ans+=((long long)1<<i);
}
else if(a[i][0]>a[i][1])
{
if(flag==1&&r>=((long long)1<<i))r-=((long long)1<<i),ans-=((long long)1<<i);
else if(flag==0)ans-=((long long)1<<i);
else if(flag==1)ans+=((long long)1<<i);
}
else if(a[i][0]<a[i][1])
{
if(flag==0&&r>=((long long)1<<i))r-=((long long)1<<i),ans-=((long long)1<<i);
else if(flag==1)ans-=((long long)1<<i);
else if(flag==0)ans+=((long long)1<<i);
}
}
printf("%lld\n",ans);
}
return 0;
}
CF1918C XOR-distance 题解的更多相关文章
- [LightOJ1240]Point Segment Distance 题解
题意简述 原题LightOJ 1240,Point Segment Distance(3D). 求三维空间里线段AB与C. 题解 我们设一个点在线段AB上移动,然后发现这个点与原来的C点的距离呈一个单 ...
- poj2689 Prime Distance题解报告
题目戳这里 [题目大意] 给定一个区间[L,R],求区间内的质数相邻两个距离最大和最小的. [思路分析] 其实很简单呀,很明显可以看出来是数论题,有关于质数的知识. 要注意一下的就是L和R的数据范围都 ...
- POJ2689:Prime Distance——题解
http://poj.org/problem?id=2689 题目大意,给不超过int的l,r,其中r-l+1<=1000000,筛出其中的素数,并且求出相邻素数差值最大和最小的一对. ———— ...
- HDU4825:Xor Sum——题解
http://acm.hdu.edu.cn/showproblem.php?pid=4825 Zeus 和 Prometheus 做了一个游戏,Prometheus 给 Zeus 一个集合,集合中包含 ...
- [CF959F]Mahmoud and Ehab and yet another xor task题解
搞n个线性基,然后每次在上一次的基础上插入读入的数,前缀和线性基,或者说珂持久化线性基. 然后一个num数组记录当时线性基里有多少数 然后每次前缀操作一下就珂以了 代码 #include <cs ...
- AT2272 [ARC066B] Xor Sum 题解
题目连接:传送门 分析 这道题只看题目中给的样例是找不出规律的 所以我们可以打一下表 1, 2, 4, 5, 8, 10, 13, 14, 18 如果你还是没有看出什么规律的话,我们可以从OEIS上搜 ...
- AGC016D - XOR Replace 置换/轮换
目录 题目链接 题解 代码 题目链接 AGC016D - XOR Replace 题解 可以发现一次操作相当于一次置换 对于每个a上的位置映射到b对应 可以找到置换群中的 所有轮换 一个k个元素的轮换 ...
- [Leetcode Week8]Edit Distance
Edit Distance 题解 原创文章,拒绝转载 题目来源:https://leetcode.com/problems/edit-distance/description/ Description ...
- HDU 全国多校第四场 题解
题解 A AND Minimum Spanning Tree 参考代码: #include<bits/stdc++.h> #define maxl 200010 using namespa ...
- P9033题解
P9033「KDOI-04」XOR Sum 题解 题目链接 传送门 题意简述 构造一个长度为 \(n\),值域为 \([0,m]\) 的异或和为 \(k\) 的序列,如果不存在则输出 \(-1\). ...
随机推荐
- ESP32+Arduino入门(四):OLED屏随机显示古诗
前言 我觉得去做一些简单又好玩的案例是入门很好的选择. 在实践的过程中会碰到很多需求很多问题在解决这些需求这些问题的过程就是在学习的过程. 今天我来分享一个随机显示古诗的案例,如果对此感兴趣可以跟我一 ...
- 为了掌握设计模式,开发了一款Markdown 文本编辑器软件(已开源)
设计模式实战项目:Markdown 文本编辑器软件开发(已开源) 一.项目简介 项目名称:YtyMark-java 本项目是一款基于 Java 语言 和 JavaFX 图形界面框架 开发的 Markd ...
- php 二维数组转成一维数组
// 1 $c = call_user_func('array_merge', $reds);// 2 $c = array_merge(...$reds);// 3 array_map(functi ...
- windows查看连接过wifi的密码
如何使用批处理脚本获取已保存的WiFi密码 在日常使用电脑时,我们经常会连接多个WiFi网络.随着时间的推移,可能会忘记某些WiFi的密码.幸运的是,Windows系统提供了命令行工具netsh,可以 ...
- 信息资源管理综合题之“H7N9禽流感-同学有无权利要求政府疫情进行信息公开 和 依据什么法律 和 相关法律的作用是什么 和 结合案例”
一.案例:网络新闻报道某省有一名疑似H7N9禽流感病毒患者就医后不治身亡,于是刘苗红同学写信给该省政府,要求公开H7N9相应时期的信息 1.刘苗红同学有无权利要求省政府对H7N9疫情进行信息公开? 2 ...
- 设计模式之“原型模式(ProtoType)”
一.原型模式(ProtoType) 作用:用原型实例指定创建对象的种类,并且通过拷贝这些原创新的对象 白话解释:用于创建重复的对象,同时有能保证性能(这种类型的设计模式属于创建型设计模式,他提供了一种 ...
- 踩坑之MySQL安装及修改初始密码
不得不说,mysql client的安装及改初始密码步骤多,繁琐,坑也不少,下面就总结下安装流程及遇到的那些坑(Windows): 1.安装 安装地址:https://dev.mysql.com/do ...
- MySQL8.0安装与环境配置win10
本次安装笔者借鉴了n篇前辈的文章,如有冒犯,请指正 https://blog.csdn.net/qq_20788055/article/details/80372577 https://blog.cs ...
- 自定义Marix的自定义动画,支持缓动动画属性
最近用画布的MatrixTransForm做变换,需要用Matrix做动画处理,网上冲浪找了一圈,没有找出好的解决方法 Stack Overflow 给出了一部分的解决方法,但是不支持缓动函数,貌似不 ...
- Vue3源码解析--收集的依赖是什么?怎么收集的?什么时候收集的?
从Vue开始较大范围在前端应用开始,关于Vue一些基础知识的讨论和面试问题就在开发圈子里基本上就跟前几年的股票和基金一样,楼下摆摊卖酱香饼的阿姨都能说上几句那种.找过前端开发工作或者正在找开发工作的前 ...