E1. Bitwise Queries (Easy Version)

a+b=(a&b)+(a∣b)a+b=(a\&b)+(a|b)a+b=(a&b)+(a∣b)
根据上述式子用333次$&和333次∣|∣操作求出a1+a2,a2+a3,a1+a3a_1+a_2,a_2+a_3,a_1+a_3a1​+a2​,a2​+a3​,a1​+a3​由此得出a1,a2,a3a_1,a_2,a_3a1​,a2​,a3​
根据a1⊕ai=xa_1\oplus a_i=xa1​⊕ai​=x于是ai=x⊕a1a_i=x\oplus a_1ai​=x⊕a1​可使用n−3n-3n−3次⊕\oplus⊕操作得出答案
共计n+3n+3n+3次。。。
大佬题解
a+b=(a⊕b)+2×(a&b)a+b=(a\oplus b)+2×(a\&b)a+b=(a⊕b)+2×(a&b)
如果已知a1⊕a2,a2⊕a3a_1\oplus a_2,a_2 \oplus a_3a1​⊕a2​,a2​⊕a3​那么a1⊕a3=(a1⊕a2)⊕(a2⊕a3)a_1\oplus a_3=(a_1\oplus a_2)\oplus (a_2\oplus a_3)a1​⊕a3​=(a1​⊕a2​)⊕(a2​⊕a3​)
那么只需用555次就可以知道a1,a2,a3a_1,a_2,a_3a1​,a2​,a3​最终用n+2n+2n+2次得出答案。

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<set>
#include<map>
#include<cmath>
#include<stack>
#include<queue>
#include<random>
#include<bitset>
#include<string>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<unordered_map>
#include<unordered_set>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int mod=998244353;
const int N=100010;
int x,y,z;
void prework()
{int ab1,ab2,ac1,ac2,bc1,bc2;printf("XOR 1 2\n");fflush(stdout);cin>>ab1;printf("AND 1 2\n");fflush(stdout);cin>>ab2;printf("XOR 1 3\n");fflush(stdout);cin>>ac1;printf("AND 1 3\n");fflush(stdout);cin>>ac2;bc1 = ab1 ^ ac1;printf("AND 2 3\n");fflush(stdout);cin>>bc2;x=ab1+2*ab2;y=ac1+2*ac2;z=bc1+2*bc2;
}
int main()
{IO;int T=1;//cin>>T;while(T--){int n;cin>>n;vector<int> ans(n+1);prework();ans[1]=(x+y-z)/2;ans[2]=(x+z-y)/2;ans[3]=(y+z-x)/2;for(int i=4;i<=n;i++){int tmp;printf("XOR 1 %d\n",i);fflush(stdout);cin>>tmp;ans[i]=tmp^ans[1];}cout<<"! ";for(int i=1;i<=n;i++) cout<<ans[i]<<' ';cout<<'\n';}return 0;
}

E2. Bitwise Queries (Hard Version)

大佬题解
同样只要我们能确认一个值,其余的值都能通过异或来得到。由此我们目标是确定一个值。

注意到0<xi<n−10<x_i<n-10<xi​<n−1,由此数组有两种情况

①对于数组元素重复的情况,我们首先进行n−1n-1n−1次x1⊕xix_1\oplus x_ix1​⊕xi​将异或值记入数组aia_iai​,不难发现其中肯定存在相同的值,只要记录相同值的位置i,ji,ji,j那么只需要进行一次xi&xjx_i\&x_jxi​&xj​即可知道xix_ixi​和xjx_jxj​,那么就能根据aia_iai​或者aja_jaj​得出x1x_1x1​进而得出答案。操作nnn次
②如果不存在那么一定有某个数与第一个数相差1,ai=1a_i=1ai​=1,即xi⊕x1=1x_i\oplus x_1=1xi​⊕x1​=1,于是 不难得知x1x_1x1​和xix_ixi​分别是(x1&xi)(x_1\& x_i)(x1​&xi​)和(x1&xi)⊕1(x_1\& x_i)\oplus1(x1​&xi​)⊕1
然后随便找一个与第一个数奇偶性相同的数(ai&1=0a_i\&1=0ai​&1=0)用一次&\&&操作x1&xix_1\&x_ix1​&xi​的奇偶性即是x1x_1x1​的奇偶性,于是可以得出x1x_1x1​。操作n+1n+1n+1次

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<set>
#include<map>
#include<cmath>
#include<stack>
#include<queue>
#include<random>
#include<bitset>
#include<string>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<unordered_map>
#include<unordered_set>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int mod=998244353;
const int N=200010;
int a[N];
map<int,int> pos;
int main()
{//IO;int T=1;//cin>>T;while(T--){int n;cin>>n;pos.clear();pos[0]=1;int k=0,v;for(int i=2;i<=n;i++){printf("XOR 1 %d\n",i);fflush(stdout);cin>>a[i];if(pos[a[i]]&&!k){printf("AND %d %d\n",pos[a[i]],i);fflush(stdout);cin>>v;k=i;}pos[a[i]]=i;}if(k) a[1]=a[k]^v;else{printf("AND 1 %d\n",pos[1]);fflush(stdout);cin>>a[1];for(auto t:pos){if((t.first&1)||t.second==1) continue;printf("AND 1 %d\n",t.second);fflush(stdout);int c; cin>>c;if(c&1) a[1]^=1;break;}}cout<<"! "<<a[1]<<' ';for(int i=2;i<=n;i++) cout<<(a[i]^a[1])<<' ';cout<<'\n';}return 0;
}

要加油哦~

codeforces1451 E. Bitwise Queries(位运算妙用)相关推荐

  1. python bitwise operator 位运算

    a^b: xor, (a and not b) or (not a and b)

  2. CodeForces - 1451E2 Bitwise Queries (Hard Version)(交互+构造+位运算)

    题目链接:点击查看 题目大意:给出一个长度为 n(n 保证了是 2 的幂次),每个数的范围在 [ 0 , n - 1 ] 的一个数组,现在要求通过有限次操作确定下来这个数组: 询问 a[ i ] xo ...

  3. java反码算术运算求和,位运算的妙用,运算妙用

    位运算的妙用,运算妙用 最近在学java,其实仅仅是在命令行里写程序跟C语言没有太大的区别,思想都是一样的.遇到了一个比较新鲜(后来知道原来C中也有)的东西--位元算(又叫位操作).多新鲜啊,毕向东老 ...

  4. 【OpenCV 例程200篇】20. 图像的按位运算(cv2.bitwise)

    专栏地址:『youcans 的 OpenCV 例程 200 篇』 文章目录:『youcans 的 OpenCV 例程200篇 - 总目录』 [youcans 的 OpenCV 例程200篇]20. 图 ...

  5. c语言位运算的妙用-程序优化

    目录 基本知识 四个妙用 1.判断整型变量奇偶 原理 代码 2.交换变量 原理 代码 3.乘/除2的n次 原理 代码 4.对2的次幂取余 原理 代码 5.得到整型变量二进制形式某位置的值 原理 代码 ...

  6. 在php中将5按位与运算,PHP 5.2和PHP 5.3中对大整数的按位运算(Bitwise operations on big integers in PHP 5.2 and PHP 5.3)...

    PHP 5.2和PHP 5.3中对大整数的按位运算(Bitwise operations on big integers in PHP 5.2 and PHP 5.3) 我将省略有关我是如何做到这一点 ...

  7. 【LeetCode】妙用位运算解题

    [LeetCode]妙用位运算解题 文章目录 [LeetCode]妙用位运算解题 交替位二进制数★ 插入★ 数字范围按位与★★ 比特位计数★★ 下一个数★★ 消失的两个数字★★★ 修改后的最大二进制字 ...

  8. 位运算的那些奇技淫巧 | 掌(装)握(逼)必备,妙解两道算法题

    这里写目录标题 一.常(装)见(逼)的位操作 先看几个有意思的位操作: 1.判断奇数偶数 2.交换两个数字 3.找出没有重复的数字 4.m的n次方 5.判断一个数是不是二的指数 6.找出不大于N的最大 ...

  9. python左移右移位运算_Python这些位运算的妙用,绝对让你大开眼界

    位运算的性能大家想必是清楚的,效率绝对高.相信爱好源码的同学,在学习阅读源码的过程中会发现不少源码使用了位运算.但是为啥在实际编程过程中应用少呢?想必最大的原因,是较为难懂.不过,在面试的过程中,在手 ...

最新文章

  1. java interface class_Java中常量定义在interface和class的区别(转)
  2. Timer TimeTask Handler
  3. SQL Sever联接查询
  4. 61种常用JavaScript
  5. 全球与中国工业低压变频器市场十四五前景规划和远景目标建议报告2022-2028年版
  6. 计算机办公价格,公职人员,你的办公电脑最少要用6年,而价格不能超过这个数?...
  7. Zookeeper基础笔记
  8. Ubuntu16.04几分钟自动断网问题
  9. python基础——使用list和tuple
  10. xp谷歌浏览器时间快了_Win7系统零日漏洞曝光,谷歌建议:升级Windows 10
  11. FlinkX脏值处理
  12. 画fits图像上的极小值点
  13. 软件体系结构期末考试总结
  14. Vue 加载 SVG 图片文件
  15. GEO数据库学习一(简介 数据下载 芯片知识)
  16. [Android]自己动手做个拼图游戏
  17. PlantUML(程序员绘制流程图专用工具)
  18. 星巴克与阿里巴巴集团结成战略合作伙伴关系,共同变革中国咖啡行业的客户体验
  19. 好用的手机投屏电脑软件
  20. 分享|破世界纪录的OceanBase,如今入选了国际顶会VLDB 2022

热门文章

  1. 评价的等级优良差_满意程度等级划分
  2. java转python推荐算法_java和python实现一个加权SlopeOne推荐算法
  3. 一条SQL语句的执行过程
  4. PHP做二次开发:ThinkCMF门户应用安装
  5. [Java基础]自定义注解 格式本质
  6. 高等数学下-赵立军-北京大学出版社-题解-练习8.3
  7. [蓝桥杯][算法提高VIP]聪明的美食家-dp
  8. django mysql connector,MySQL Connector / python在Django中不起作用
  9. python输出文本 去掉引号_Python可以在文本文件中读取时从字符串中删除双引号吗?...
  10. word List 46