LINK:X-OR

本来是应该昨天晚上发的 可是昨天晚上 做这道题 写了一个分治做法 一直wa

然后查错 查不出来 心态崩了 想写对拍 发现交互库自己写不出来。

一系列sb操作 == 我都醉了。

今天重构了代码 换了另外一种做法就很快就过了。

考虑怎么做:求出所有位置上的数字是谁 光凭异或是很难异或出来的。

或许可以快速察觉到一个做法 对于每一位来做 然后 找到第i为为0的是谁 这样就得到了一个nlogn的做法。

会爆掉询问次数。

发现如果逐一找到每个位置上是谁的话 更快需要找到0所在。

考虑如何找0 在已经有一个函数可以帮忙确定某一位是谁的情况下。

容易得到 随便找个数字开始或 然后 遇到刚好等于自己的 说明 对方是自己的子集 难么进行一次替换。

最终就会替换到0.

这样的过程是O(n)+log^2的 最后再来一次O(n)的扫描 就可以通过了。

可以利用map 来优化询问次数.一开始每一位的确定位置可以直接rand 期望下是很快的。

考虑分治做法:

考虑一种确定一个数字是谁的方法:O(n)暴力扫 然后得到的最小值就是自己的值当然0除外.

那么我们可以拿到一个值 然后 把自己的子集都给搞出来 不断重复这个过程 直至只剩下两个数字。

每次选取当前二进制下的一半 这样随机的效率较高。

期望下询问次数也不超过2n+c 所以可以通过 不过不知道为什么我写挂了...

这里是第一种做法:

const int MAXN=2050;
int n,m=11;
int p[MAXN];
int sum[MAXN],b[MAXN];
inline int ask(int i,int j)
{
cout<<"?"<<' '<<i<<' '<<j<<endl;
int x;cin>>x;return x;
}
inline int re(int x){return rand()%x+1;}
inline int gs(int x)
{
int ans=0;
vep(0,m,i)
{
int ww=0;
if(b[i]!=x)ww=ask(b[i],x);
if(ww&(1<<i))ans|=(1<<i);
}
return ans;
}
int main()
{
//freopen("1.in","r",stdin);
ios::sync_with_stdio(false);
srand(time(0));
cin>>n;
int cnt=0;
while(cnt<m)
{
int x=re(n);int y=re(n);
if(x==y)continue;
int ww=ask(x,y);
vep(0,m,i)if(!(ww&(1<<i))&&!b[i])
{
b[i]=x;++cnt;
}
}
cout<<"ww"<<endl;
int ww=gs(1),pos=1;
rep(2,n,i)
{
int x=ask(pos,i);
if(x<=ww)
{
pos=i;
ww=gs(i);
}
}
rep(1,n,i)if(pos!=i)p[i]=ask(pos,i);
cout<<"!";
rep(1,n,i)cout<<' '<<p[i];
return 0;
}

Codeforces Round #649 (Div. 2) E. X-OR 交互 二进制 随机 期望的更多相关文章

  1. Codeforces Round #649 (Div. 2)

    Codeforces Round #649 (Div. 2) -- WKL \(\mathcal{A}\)题: \(\mathrm{XXXXX}\) Greedy implementation *12 ...

  2. Codeforces Round #649 (Div. 2) C. Ehab and Prefix MEXs

    题目链接:https://codeforces.com/contest/1364/problem/C 题意 给出大小为 $n$ 的非递减数组 $a$,构造同样大小的数组 $b$,使得对于每个 $i$, ...

  3. Codeforces Round #649 (Div. 2) B. Most socially-distanced subsequence

    题目链接:https://codeforces.com/contest/1364/problem/B 题意 给出大小为 $n$ 的一个排列 $p$,找出子序列 $s$,使得 $|s_1-s_2|+|s ...

  4. Codeforces Round #649 (Div. 2) A. XXXXX

    题目链接:https://codeforces.com/contest/1364/problem/A 题意 找出大小为 $n$ 的数组 $a$ 的最长连续子数组,其元素和不被 $x$ 整除. 题解 如 ...

  5. Codeforces Round #649 (Div. 2) C、Ehab and Prefix MEXs D、Ehab's Last Corollary 找环和点染色

    题目链接:C.Ehab and Prefix MEXs 题意; 有长度为n的数组a(下标从1开始),要求构造一个相同长度的数组b,使得b1,b2,....bi集合中没有出现过的最小的数是ai. mex ...

  6. Codeforces Round #649 (Div. 2) C. Ehab and Prefix MEXs (构造,贪心)

    题意:有长度为\(n\)的数组\(a\),要求构造一个相同长度的数组\(b\),使得\({b_{1},b_{2},....b_{i}}\)集合中没有出现过的最小的数是\(a_{i}\). 题解:完全可 ...

  7. Codeforces Round #649 (Div. 2) B. Most socially-distanced subsequence (数学,差分)

    题意:有一长度为\(n\)的数组,求一子序列,要求子序列中两两差的绝对值最大,并且子序列尽可能短. 题解:将数组看成坐标轴上的点,其实就是求每个单调区间的端点,用差分数组来判断单调性. 代码: #in ...

  8. Codeforces Round #649 (Div. 2) A. XXXXX (贪心)

    题意:有一个长度为\(n\)的数组,找一段最长子数组,使得其元素和为\(x\),如果存在,输出子数组的长度,否则输出\(-1\). 题解:这题我们要从元素和\(sum\)来考虑,首先,如果原数组的所有 ...

  9. Codeforces Round #256 (Div. 2) D. Multiplication Table(二进制搜索)

    转载请注明出处:viewmode=contents" target="_blank">http://blog.csdn.net/u012860063?viewmod ...

随机推荐

  1. 富文本编辑器实现从word中复制图片(外挂)

    1问题 基于web的富文本编辑器的功能普遍较弱,而word是公认的宇宙第一好用的文档编辑器,所以许多人都习惯先在word中编辑,然后再将内容粘到web富文本编辑器中. 但是,这种操作有一个问题:图片带 ...

  2. 字符串的排列(剑指offer-27)

    题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 输入描述: 输 ...

  3. 代码文件编码unicode 无标签, 导入vs项目编译不过的问题

    很多人经常需要把代码分别在linux.windows上编译.在linux中gcc编译的时候,文件格式为utf-8无bom格式,可是如果将文件拿到windows上,用vs编译的时候,发现各种报错,且都是 ...

  4. 使用virtualBox 创建虚拟机

    第一次使用感觉并没有VMware好用,尤其是鼠标在虚拟机和宿主机之间切换的时候很烦,需要按键盘右边ctrl虽然有提示right ctrl但是第一次使用硬是折腾了好半天.感觉不记录一下对不起这个下午. ...

  5. 一篇文章掌握 Python 内置 zip() 的全部内容

    一篇文章掌握 Python 内置 zip() 的全部内容 zip() 是 Python 中最好用的内置类型之一,它可以接收多个可迭代对象参数,再返回一个迭代器,可以把不同可迭代对象的元素组合起来. 我 ...

  6. (六)pandas 日常使用技巧

    pandas数据处理 1.删除重复元素 import numpy as np import pandas as pd from pandas import Series,DataFrame df = ...

  7. tensorboard学习笔记

    TensorBoard 默认是不会记录每个节点的用时.耗费的内存大小等这些信息的,那么如何才能在图上显示这些信息呢?关键就是如下这些代码,主要就是在 sess.run() 中加入 options 和  ...

  8. 网页排名算法PagaRank

    网页排名算法PageRank PageRank,网页排名,又叫做网页级别.是一种利用网页之间的超链接数据进行计算的方法.它是由Google的两位创始人提出的. 对于用户而言,网页排名一般是比较主观的, ...

  9. 理解js中的原型,原型对象,原型链

    目录 理解原型 理解原型对象 实例属性与原型属性的关系 更简单的原型语法 原型的动态性 原型链 理解原型 我们创建的每一个函数都有一个prototype(原型)属性,这个属性是一个指针,指向一个对象, ...

  10. Linux下Storm2.1.0的伪分布式安装

    官方下载网址:http://storm.apache.org/downloads.html 1.第一步我们先从官网下载解压包  2.然后进行解压 3.配置环境变量 在profile里面插入如下格式语句 ...