CF1451E2 Bitwise Queries (Hard Version)

题意:

有 \(n\) 个数( \(n\le 2^{16}\) ,且为 \(2\) 的整数次幂,且每一个数都属于区间 \([0,n-1]\) ) 可以通过询问交互库不超过 \(n+1\) 次询问,每次询问编号为 \(i,j\) ( \(1\le i,j \le n\) ,\(i\ne j\) ) 的 XORORAND ,求出这 \(n\) 个数 。

题解:

分类讨论,先对 \(2-n\) 这 \(n-1\) 个数每个数都与 \(1\) 询问一次 XOR ,之后考虑 \(2\) 次求出 \(a_1\) 。

  • 所有数都互不相同

    此时所有 \(xor\) 值都不相同且都不等于 \(0\) ,可以分别找出 \(xor_i=1\) 与 \(xor_j=n-2\) 的数,用 \(1\) 一次 \(and\) 询问求出 \(a_1\) 的前 \(m\) 位与最后一位 。

  • 有些数相同

    那些数的 \(xor\) 值相同 。

    • 有些数与 \(a_1\) 相同

      找出 \(xor_i=0\) 的数,与 \(1\) 询问 AND ,直接求出 \(a_1\) 。

    • 有些数相同,但不等于 \(a_1\)

      找出两个 \(xor\) 相同的数,用 \(1\) 次询问求出 \(a_i\) ,进而用之前询问求得的 \(xor_i\) 求出 \(a_1\) 。

代码:

#include<bits/stdc++.h>
using namespace std;
#define Maxn 65540
inline int rd()
{
int x=0;
char ch,t=0;
while(!isdigit(ch = getchar())) t|=ch=='-';
while(isdigit(ch)) x=x*10+(ch^48),ch=getchar();
return x=t?-x:x;
}
int n,Xor[Maxn],ans[Maxn],vis[Maxn];
bool All=true;
inline int XOR(int x,int y)
{
printf("XOR %d %d\n",x,y),fflush(stdout);
return rd();
}
inline int AND(int x,int y)
{
printf("AND %d %d\n",x,y),fflush(stdout);
return rd();
}
int main()
{
//freopen(".in","r",stdin);
//freopen(".out","w",stdout);
n=rd();
for(int i=2;i<=n;i++)
{
Xor[i]=XOR(1,i);
if(vis[Xor[i]] || Xor[i]==0) All=0;
vis[Xor[i]]=1;
}
if(All)
{
for(int i=2;i<=n;i++)
{
if(Xor[i]==1) ans[1]|=AND(1,i);
if(Xor[i]==n-2) ans[1]|=AND(1,i);
}
}
else
{
if(vis[0])
{
for(int i=2;i<=n;i++) if(!Xor[i]) { ans[1]=AND(1,i); break; }
}
else
{
for(int i=0;i<=n-1;i++) vis[i]=0;
for(int i=2;i<=n;i++)
{
if(vis[Xor[i]]) { ans[1]=Xor[i]^AND(vis[Xor[i]],i); break; }
vis[Xor[i]]=i;
}
}
}
for(int i=2;i<=n;i++) ans[i]=ans[1]^Xor[i];
printf("! ");
for(int i=1;i<=n;i++) printf("%d%c",ans[i],(i==n)?'\n':' ');
fflush(stdout);
//fclose(stdin);
//fclose(stdout);
return 0;
}

【做题记录】CF1451E2 Bitwise Queries (Hard Version)的更多相关文章

  1. UOJ 做题记录

    UOJ 做题记录 其实我这么弱> >根本不会做题呢> > #21. [UR #1]缩进优化 其实想想还是一道非常丝播的题目呢> > 直接对于每个缩进长度统计一遍就好 ...

  2. project euler做题记录

    ProjectEuler_做题记录 简单记录一下. problem 441 The inverse summation of coprime couples 神仙题.考虑答案为: \[\begin{a ...

  3. Sam做题记录

    Sam做题记录 Hihocoder 后缀自动机二·重复旋律5 求一个串中本质不同的子串数 显然,答案是 \(\sum len[i]-len[fa[i]]\) Hihocoder 后缀自动机三·重复旋律 ...

  4. 退役IV次后做题记录

    退役IV次后做题记录 我啥都不会了.... AGC023 D 如果所有的楼房都在\(S\)同一边可以直接得出答案. 否则考虑最左最右两边的票数,如果左边>=右边,那么最右边会投给左边,因为就算车 ...

  5. 退役III次后做题记录(扯淡)

    退役III次后做题记录(扯淡) CF607E Cross Sum 计算几何屎题 直接二分一下,算出每条线的位置然后算 注意相对位置这个不能先搞出坐标,直接算角度就行了,不然会卡精度/px flag:计 ...

  6. 退役II次后做题记录

    退役II次后做题记录 感觉没啥好更的,咕. atcoder1219 历史研究 回滚莫队. [六省联考2017]组合数问题 我是傻逼 按照组合意义等价于\(nk\)个物品,选的物品\(\mod k\) ...

  7. BJOI做题记录

    BJOI做题记录 终于想起还要做一下历年省选题了2333 然而咕了的还是比做了的多2333 LOJ #2178. 「BJOI2017」机动训练 咕了. LOJ #2179. 「BJOI2017」树的难 ...

  8. FJOI2017前做题记录

    FJOI2017前做题记录 2017-04-15 [ZJOI2017] 树状数组 问题转化后,变成区间随机将一个数异或一,询问两个位置的值相等的概率.(注意特判询问有一个区间的左端点为1的情况,因为题 ...

  9. [日记&做题记录]-Noip2016提高组复赛 倒数十天

    写这篇博客的时候有点激动 为了让自己不颓 还是写写日记 存存模板 Nov.8 2016 今天早上买了两个蛋挞 吃了一个 然后就做数论(前天晚上还是想放弃数论 但是昨天被数论虐了 woc noip模拟赛 ...

随机推荐

  1. Linux目录同步到阿里云OSS工具ossutil

    Linux目录同步到阿里云OSS工具ossutil 背景 ​ 最近公司服务用户激增,常规文件服务器不能满足需求,严重影响性能,决定将静态文件迁移到阿里云OSS,用来解决性能问题,提高用户体验.毕竟之前 ...

  2. eclipse中的一些快捷键

    1.内容提示 Alt+/ 2.快速修复 ctrl+/ 3.导包 ctrl+shift+o 4.格式代码块 ctrl+shift+o 5.向前向后 Alt+方向键 6.添加注释 ctrl+shift+/ ...

  3. mysql更新数据时:当想mysql某插入有某字段设置了unique且和之前相同时,会报错,并停止运行

    这个在mysql5.7会报错: 如openid设为unique: 1062 - Duplicate entry 'oTfYq6PKne00IrcTqphmKqKnsahM' for key 'qx_w ...

  4. js中date类型的格式转化为yyyy-MM-dd HH:mm:ss的String类型

    在vue中或其他框架中可以在Date的原型链中添加Format的方法,如ruoyi可以写在main.js中更好,如果写在utils还需要去导入包. 正常的js直接放到utils.js就好 Date.p ...

  5. typora+picgo+gitee 图片无法加载问题

    typora+picgo+gitee 图片无法加载问题 待解决

  6. Charles安装https证书

    Charles抓取https的包,出现unknow,需要安装https证书.

  7. 『PyTorch』屌丝的PyTorch玩法

    1. prefetch_generator 使用 prefetch_generator库 在后台加载下一batch的数据,原本PyTorch默认的DataLoader会创建一些worker线程来预读取 ...

  8. disruptor笔记之四:事件消费知识点小结

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  9. CF803G-Periodic RMQ Problem【离散化,线段树,ST表】

    正题 题目链接:https://www.luogu.com.cn/problem/CF803G 题目大意 一个长度为\(n\)的序列\(a\)复制\(k\)份连接,要求支持 区间赋值 区间查询最小值 ...

  10. IDEA破解方法:重新刷新到30天【支持正版】

    IDEA破解方法:重新刷新到30天[支持正版] 步骤: 导入plugins.zhile.io 进入File-->Settings-->Plugins 点设置(齿轮符号)-->Mana ...