| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> Codeforces Round #685 (Div. 2)E2. Bitwise Queries (Hard Version)题解(数学竞赛/组合构造题) -> 正文阅读 |
|
[数据结构与算法]Codeforces Round #685 (Div. 2)E2. Bitwise Queries (Hard Version)题解(数学竞赛/组合构造题) |
题目链接: https://codeforces.com/contest/1451/problem/E2 大意:这是一个人机交互题。一共有N个[0, N-1]的整数,其中N是2的幂次。允许每次人指定其中两个数字与AND、OR、XOR其中一种运算,查询其计算后得到的结果。最多查询N + 1次,复现出整个数组每个数字的值。 思路: 记我们的原始的数组为A数组。 定理一: 对于非负整数x与y,有: x + y = (x xor y) + 2 * (?x and y) 证明:按照比特位,按位计算。 1 xor 1 + (1 and 1) * 2 = 2 = 1 + 1 1 xor 0 + (1 and 0) * 2 = 1 = 1 + 0 0 xor 0 + (0?and 0) * 2 = 0 = 0 + 0 按照二进制每一位加起来,可证。 定理二: 只需要N - 1次xor查询,即可得到任何两个数字的xor结果。 证明: 已知:A[1] xor A[1] = 0 (记为v1) 记录: A[1] xor A[2] = v2; A[1] xor A[3] = v3; ...; A[1] xor A[n] = vn; 那么任意两个数字A[x] xor?A[y] = A[x] xor (A[1] xor A[1]) xor A[y] = (A[x] xor A[1]) xor (A[y] xor A[1])? = vx xor vy。 那么我们可以设计方案如下: 首先先查询一遍v2, v3, ..., vn。 1、如果存在1<=i<=j<=n,vi = vj ? ? ? 那么vi xor A[1] = vj xor A[1] ? ? ? 有A[i] = A[j],通过A[i] And A[j] = A[i]算出A[i] ? ? ? 从而可以推出其他所有的数字了。 2、如果不存在vi = vj,那么因为N是2的幂次,v的取值一定在[0, n - 1]中中间都存在。 ? ? ?那么记下vx? = n - 1,二进制下全为1 ? ? ?那么A[1]与A[x]一定每一位都不相同,A[1] and A[x] = 0。 ? ? ?那么只需要再任意指定一个其他的数字y,查询A[1] and A[y], A[x] and A[y]的值。 ? ? ?根据定理一,我们可以得到, ? ? ?A[1] + A[x] = vx ? ? ?A[x] + A[y] = 2 * (A[y] and A[x]) + (vx xor vy) ? ? ?A[1] + A[y] = 2 * (A[y] and A[1]) + vy ? ? 解三元一次方程即可。得到其中任意一个值,推出其他所有数值就行了。 代码(cf服务器崩了,还未跑出结果,下面代码暂不支持直接复制粘贴保证通过):
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 17:24:53- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |