一道有趣的题。

看到按位的矩阵运算,如果对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. HDU3336 Count the string(kmp

    It is well known that AekdyCoin is good at string problems as well as number theory problems. When g ...

  2. split、paste命令

    一.split分割文件 语法       split [OPTION] ... [INPUT [PREFIX]] 描述       将固定大小的INPUT输出到PREFIXaa,PREFIXab,.. ...

  3. 导出excel-NPOI

    前台调用: view: <a href='/Admin/NurseUser/Excel' target='_blank'>导出Excel</a>或js: window.loca ...

  4. js获取url(request)中的参数

    index.htm?参数1=数值1&参数2=数值2&参数3=数据3&参数4=数值4&...... 静态html文件js读取url参数,根据获取html的参数值控制htm ...

  5. Visual Studio 2010中的js注释

    Visual Studio 2010中的js注释已经很强大了,但怎么才能和调用c#的方法一样容易呢?怎样才能让每个参数都有注释说明呢?底下就是想要的答案. 先上图,如图所示: 其中红色的办法为注释效果 ...

  6. 一头扎进 JAVA

    硅不可 吉米 JAVA 基础 -- 基础不牢,地动山摇 子类应该比 父类更为 开放 (public protected default private) 子类方法不能比父类抛出更高异常( 可以为父类方 ...

  7. pathlib:处理文件路径的瑞士军刀

    pathlib是python3.4中引入的模块,专门用来处理路径的.个人觉得这是一个非常非常强大的模块,可以说是处理路径的一把瑞士军刀,下面我们就来看看它的功能. 在pathlib中有一个Path这个 ...

  8. 一,Devops核心要点及kubernetes的架构概述

    目录 1,devops的简述及要点 2,kubernetes的简单介绍与组成 特性 集群构成 pod的基本概念 kubernetes网络 1,devops的简述及要点 DevOps,分层架构 ---& ...

  9. Linux SWAP交换分区维护

    1.查看当前swap分区信息

  10. django笔记一

    课程介绍 MVC 大部分开发语言中都有MVC框架 MVC框架的核心思想是:解耦 降低各功能模块之间的耦合性,方便变更,更容易重构代码,最大程度上实现代码的重用 m表示model,主要用于对数据库层的封 ...