一道有趣的题。

看到按位的矩阵运算,如果对FWT比较熟悉的话,会比较容易地想到。

这种形式也就FWT等转移里面有吧……就算有其他的也难构造出来。

然而FWT的矩阵并不是酉矩阵(也就是满足 \(AA^T = I\)),这个很好办,就直接把行列式除到 \(1\) 就好了。

于是得到转移矩阵:

\[A =
\left[
\begin{matrix}
\frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}} \\
\frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}}
\end{matrix}
\right]
\]

我们接下来肯定是要做FWT了,显然,对所有 \(i\) 都做一遍 manipulate(A, i)

得到的东西肯定有性质。我们直接带入FWT的定义式进行展开,得到第 \(i\) 位的值为

\[\left(\frac{1}{\sqrt{2}}\right)^n \left( \left(-1\right)^{|x \cap i|} + \left(-1\right)^{|y \cap i|} \right)
\]

显然,要么这一位为 \(0\),要么为 $ \pm 2 \left(\frac{1}{\sqrt{2}}\right)^n $。

我们考虑不为零的情况,因为只有这样才有用。

\[\begin{align*}
|x \cap i| + |y \cap i| & \equiv 0 \pmod 2\\
|\left(x \cap i\right) \oplus \left(y \cap i\right)| & \equiv 0 \pmod 2\\
|\left(x \oplus y \right) \cap i| & \equiv 0 \pmod 2\\
\end{align*}
\]

于是我们得到了 \(x \oplus y\) 这个定值。这个定值和我们查询得到的 \(i\) 的关系就是交大小为偶数。

那么我们不断FWT然后询问 \(i\),因为答案随机,猜测很快能随机出。

下面有两种做法,要么用异或方程组动态高斯消元,要么暴力。

然后我写的是暴力,具体就是得到一个 \(i\) 就把所有可能满足条件的都标上,直到剩下一个数就是答案。 具体可以用一个bool数组,然后每次and。

但是有一个问题,\(0\) 一直都满足,这样会有两个满足,导致死循环。因为题目保证 \(x \neq y\),所以 \(0\) 一开始就是不可能的。这样就可以唯一确定一个了。

因为期望查询次数为 \(O\left(n\right)\),常数很小(这个我是真的不会算

所以期望询问次数 \(O\left(n^2\right)\),除交互库复杂度 \(O\left(n2^n\right)\) 可以通过此题。

#include "quantumbreak.h"
#include <bits/stdc++.h> const double is2 = 1 / sqrt(2);
double qry[2][2] = {
{is2, is2},
{is2, -is2}
};
int rest, can[1 << 16], iss[1 << 16];
int query_xor(int n, int _) {
const int U = 1 << n;
rest = U - 1;
for (int i = 0; i != U; ++i) {
iss[i] = __builtin_popcount(i) & 1 ^ 1;
can[i] = true;
}
can[0] = false;
while (rest > 1) {
for (int i = 0; i != n; ++i)
manipulate(qry, i);
int x = query();
rest = 0;
for (int i = 0; i != U; ++i)
rest += (can[i] &= iss[i & x]);
}
for (int i = 0; i != U; ++i)
if (can[i])
return i;
}

【UTR #3】量子破碎的更多相关文章

  1. UOJ#328. 【UTR #3】量子破碎

    传送门 学过 \(FWT\) 看到操作 \(2\) 不难可以联想到 \(FWT\) 考虑一遍 \(\oplus\) \(FWT\) 会把 \(a_t\) 变成什么 \(a_t'=((-1)^{bitc ...

  2. UWP 应用获取 Localhosts 访问权限

    这是一篇教程,写在 win10 版<量子破碎>发售近期. 主要原因:windows 商城的应用下载实在难以忍受...... so 尝试换一个下载环境(f&q)~ 然而使用 ss 并 ...

  3. 获取 windows 商店内的 aapx 安装包 并 安装(旁加载)

    这是一篇教程,写在 win10 版<量子破碎>发售近期. 主要原因:windows 商城的应用下载实在难以忍受...... #######2016-4-9更新####### 4-6号通过旁 ...

  4. 2000G电脑大型单机游戏合集

    激活码 游戏名称(ctrl+F查找) 下载链接005875 艾迪芬奇的记忆 游戏下载链接http://pan.baidu.com/s/1t2PYRAj546_1AcOB-khJZg554158 暗影: ...

  5. unity 实现物体破碎效果的一些方法 - 细雨淅淅

    游戏越来越接近现实的感觉,如果有一个真是的 虚拟现实设备,可能我们真的会感觉是在真实世界.场景的逼真是在渲染效果.角色AI.游戏逻辑.物理效果等等一起导致的结果.现在游戏越来越大,除了渲染,物理估计是 ...

  6. unity 实现物体破碎效果的一些方法

    游戏越来越接近现实的感觉,如果有一个真是的 虚拟现实设备,可能我们真的会感觉是在真实世界.场景的逼真是在渲染效果.角色AI.游戏逻辑.物理效果等等一起导致的结果.现在游戏越来越大,除了渲染,物理估计是 ...

  7. jQuery 特效:盒子破碎和移动动画效果

    今天,我们将创建一个使用 jQuery 制作的非常甜蜜的动画效果.我们的想法是在网站的顶部有小盒子,当一个菜单项被点击时,箱子动画形成的主要内容区域分散在各处.我们会用一些不同的动画效果,我们将为菜单 ...

  8. Unity 实现物体破碎效果(转)

    感谢网友分享,原文地址(How to Make an Object Shatter Into Smaller Fragments in Unity),中文翻译地址(Unity实现物体破碎效果) In ...

  9. 第一部分:IBM量子体验

    (一)量子世界    今天的计算机使用标准的(或用物理学家的话来说,“经典的”)计算模型来执行计算与处理信息,此计算模型要追溯到图灵(Turing)和冯・诺伊曼(Von Neumann)时期.在此模型 ...

随机推荐

  1. Tensorflow常见函数case argmax equal

    常用的函数: tf.argmax(input, axis=None, name=None, dimension=None) input:输入Tensor axis:0表示按列,1表示按行 name:名 ...

  2. Eslint报错整理与解决方法

    1.‘Unexpected tab character’ 字面意思理解呢就是意想不到的制表符,当时出现的时候就是我习惯的使用Tab键去打空格,但是eslint默认不认可Tab,所以解决方法很简单: 在 ...

  3. mysql架构总结

    1.单机架构模式,多用于测试,实际生产中需优化: 2.一主多从,主数据库读和写,从数据库从主数据库同步,仅负责读,可解决一定访问量的需求: 3.MHA(Master High Availability ...

  4. js动态添加行和列(table)

    function AddTableRow() { var Table = document.getElementById("NewTable"); //取得自定义的表对象 NewR ...

  5. React源码深度解析视频 某课网(完整版)

    <ignore_js_op> [课程介绍]:        React毫无疑问是前端界主流的框架,而框架本身就是热点.课程以讲解React实现原理为主,并在实现过程中讲解这么做的原因,带来 ...

  6. 第十七篇 JS验证form表单

    JS验证form表单   这节课做一个实际的,项目里会遇到的东西,例如登录页面,我们输入‘用户名’和‘密码’或者‘手机号’还有‘验证码’等等,它都会做一个前端验证,比如验证码,是6位有效数字组成,那么 ...

  7. git ignore 如何忽略已经提交的文件修改

    git ignore git ignore的作用很简单,本地仓库忽略一些文件的修改. ignore的规格可以按文件匹配,按后缀匹配或者按文件夹匹配. 如果在项目开发过程中,需要忽略某一个文件已经提交的 ...

  8. ansible的基本学习-安装和简单的配置测试

    当下有许多的运维自动化工具(配置管理),例如:ansible.saltstack.puppet.fabric等 ansible 是一种集成it系统的配置管理.应用部署.执行特定任务的开源平台,是ans ...

  9. Spingboot项目的创建与启动(基于IDEA)

    一.Springboot的创建 1.Springboot的优点: Springboot是来简化Spring框架,从而能够更加简单快捷的构建Spring应用的框架,其具有如下优点: ①为所有Spring ...

  10. EfficientNet学习笔记

    EfficientNet是谷歌大脑在2019年提出的,论文地址是:https://arxiv.org/pdf/1905.11946.pdf 这篇文章主要想解决的一个问题是,如何平衡网络的深度.宽度和分 ...