【UTR #3】量子破碎
一道有趣的题。
看到按位的矩阵运算,如果对FWT比较熟悉的话,会比较容易地想到。
这种形式也就FWT等转移里面有吧……就算有其他的也难构造出来。
然而FWT的矩阵并不是酉矩阵(也就是满足 \(AA^T = I\)),这个很好办,就直接把行列式除到 \(1\) 就好了。
于是得到转移矩阵:
\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\) 位的值为
\]
显然,要么这一位为 \(0\),要么为 $ \pm 2 \left(\frac{1}{\sqrt{2}}\right)^n $。
我们考虑不为零的情况,因为只有这样才有用。
|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】量子破碎的更多相关文章
- UOJ#328. 【UTR #3】量子破碎
传送门 学过 \(FWT\) 看到操作 \(2\) 不难可以联想到 \(FWT\) 考虑一遍 \(\oplus\) \(FWT\) 会把 \(a_t\) 变成什么 \(a_t'=((-1)^{bitc ...
- UWP 应用获取 Localhosts 访问权限
这是一篇教程,写在 win10 版<量子破碎>发售近期. 主要原因:windows 商城的应用下载实在难以忍受...... so 尝试换一个下载环境(f&q)~ 然而使用 ss 并 ...
- 获取 windows 商店内的 aapx 安装包 并 安装(旁加载)
这是一篇教程,写在 win10 版<量子破碎>发售近期. 主要原因:windows 商城的应用下载实在难以忍受...... #######2016-4-9更新####### 4-6号通过旁 ...
- 2000G电脑大型单机游戏合集
激活码 游戏名称(ctrl+F查找) 下载链接005875 艾迪芬奇的记忆 游戏下载链接http://pan.baidu.com/s/1t2PYRAj546_1AcOB-khJZg554158 暗影: ...
- unity 实现物体破碎效果的一些方法 - 细雨淅淅
游戏越来越接近现实的感觉,如果有一个真是的 虚拟现实设备,可能我们真的会感觉是在真实世界.场景的逼真是在渲染效果.角色AI.游戏逻辑.物理效果等等一起导致的结果.现在游戏越来越大,除了渲染,物理估计是 ...
- unity 实现物体破碎效果的一些方法
游戏越来越接近现实的感觉,如果有一个真是的 虚拟现实设备,可能我们真的会感觉是在真实世界.场景的逼真是在渲染效果.角色AI.游戏逻辑.物理效果等等一起导致的结果.现在游戏越来越大,除了渲染,物理估计是 ...
- jQuery 特效:盒子破碎和移动动画效果
今天,我们将创建一个使用 jQuery 制作的非常甜蜜的动画效果.我们的想法是在网站的顶部有小盒子,当一个菜单项被点击时,箱子动画形成的主要内容区域分散在各处.我们会用一些不同的动画效果,我们将为菜单 ...
- Unity 实现物体破碎效果(转)
感谢网友分享,原文地址(How to Make an Object Shatter Into Smaller Fragments in Unity),中文翻译地址(Unity实现物体破碎效果) In ...
- 第一部分:IBM量子体验
(一)量子世界 今天的计算机使用标准的(或用物理学家的话来说,“经典的”)计算模型来执行计算与处理信息,此计算模型要追溯到图灵(Turing)和冯・诺伊曼(Von Neumann)时期.在此模型 ...
随机推荐
- python list pop()方法
#pop()用于移除列表中的一个元素(默认是最后一个元素,并且返回该元素的值) list1=['Google','Runoob','Taobao'] list_pop=list1.pop() prin ...
- python多线程学习(一)
python多线程.多进程 初探 原先刚学Java的时候,多线程也学了几天,后来一直没用到.然后接触python的多线程的时候,貌似看到一句"python多线程很鸡肋",于是乎直接 ...
- Python input/output boilerplate for competitive programming
The following code is my submission for Codeforces 1244C The Football Season. import io import sys i ...
- 外贸开发,用java调用速卖通api第一步,token的获取。
第一步 定义速卖通api的常量 public String client_id; public String client_key; public String site; 第二步 获取登 ...
- sql server len函数
len函数 --返回字符表达式中的字符数 --如果字符串中包含前导空格和尾随空格,则函数将它们包含在内 --LEN对相同的单字节和双字节字符串返回相同的值 --示例:select LEN('no'), ...
- 获取图书isbn信息 共享图书开发 图书信息接口开发过程中的心得体会
最近做一个图书共享的项目,需要用户扫一扫书籍后面的一维码,获取到书籍的isbn号码,然后通过这个isbn号码能够直接获取到这本书的名字.简介.价格.图片等信息. 于是百度搜了下,之前很多的豆瓣的接口, ...
- zabbix mongodb 监控添加
在zabbix 上添加mongodb的监控 由于使用的是zabbix 3.0 所有在模板里面又自己的模板名字叫:Template MongoDB 所以 客户端的配置如下 到配置文件目录 /usr/lo ...
- Mysql检查列是否存在并新增、修改、删除列
在MYSQL中,新增.修改.删除列时不能进行IF EXISTS判断,IF语句只能出现在存储过程当中,故博主用存储过程的方法新增.修改.删除列,修改列名称. DROP PROCEDURE IF EXIS ...
- git push 到 github
今天来简单整理一下,如何利用git命令把代码提交到GitHub平台上去,当然要提交代码到GitHub上去,您首先得要有GitHub账号,账号如何申请这里就不多做解释了 第一步:先到官网下载git安装包 ...
- liunx和aix 系统开启ftp服务
AIX开启ftp服务: 1.ftp服务的守护进程是否存在 #lssrc -s inetd 2.ftp服务的开启与关闭 #startsrc -t ftp #stopsrc -t ftp 3.ftp服务是 ...