\(\mathbf{Part. -1}\)

这是一个交互题。

Ayush 又想出了一个设置密码的新方法。他的锁有 \(n\) 个槽位,每个槽位可以放置任意非负整数。密码 \(P\) 是一个长度为 \(n\) 的整数序列,第 \(i\) 个元素将放入锁的第 \(i\) 个槽位。

为了设置密码,Ayush 构造了一个长度为 \(n\) 的整数数组 \(A\),每个元素都在区间 \([0, 2^{63}-1]\) 内。然后,他将密码 \(P\) 的第 \(i\) 个元素设置为数组中除了 \(A_i\) 以外所有元素的按位或(bitwise OR)。

你需要猜出这个密码。你可以进行查询,每次可以选择数组的一个非空下标子集,询问这些下标对应元素的按位或。你最多可以进行 13 次查询。

\(\mathbf{Part. 0}\)

这里讲一些唐诗做法。

  • \(n\) 次查询:显而易见。
  • \(\log nV\) 次查询:考虑拆位,发现如果对于同位全是 \(0\),则答案全是 \(0\),如果有大于一个 \(1\),则答案全是 \(1\)。于是考虑二分唯一一个是 \(1\) 的位即可。
  • \(\sqrt{n}\) 次查询:考虑分块,首先先查询所有不包含同块的元素,然后再查询所有异块的前缀 \(\text{OR}\) 和后缀 \(\text{OR}\)。

上述算法,都是在没有任何转换和观察下凭借硬套想出来的。显然,对这道题完全没有用。虽然这道题没有明显的转化,但是观察角度的转变在有时是很有用的(比如其实上述提到的拆位就是一个很好的观察角度从整体到个体的转变例子)。

\(\mathbf{Part. 1}\)

显然,在想出上述询问次数爆炸的算法后,会发现,题目每个点的密码都是一个询问集合 \(S\) 的并组成的(并是由于 \(\text{OR}\) 有可并性)。

从每次询问的角度观察,会发现这是不是完全不可做阿???那如果从询问的角度不可做,那么可以从每个密码的集合 \(S\) 来考虑。

对于第 \(i\) 个密码组成的询问集合 \(S_i\) 来说,\(a_i\) 显然不能出现在 \(\forall x \in S_i\) 的询问中,但是对于 \(\forall j \neq i\),都必须 \(\exists x \in S_i\),使得 \(a_j\) 在第 \(x\) 次询问中。(性质 \(1\))

既然 \(a_i\) 不能出现在 \(\forall x \in S_i\) 的询问中,那么考虑从 \(a_i\) 的角度观察, \(a_i\) 肯定全部出现在 \(\forall x \notin S_i\) 的询问中是最好的。(性质 \(2\))

因此,我们考虑如果以性质 \(2\) 的方式贪心,问题转化成寻找对于 \(13\) 个数,最大的集合 \(T\) 满足 \(\forall a\in T, b \in T, a \not\subseteq b\)。

\(\mathbf{Part. 2}\)

似乎又没思路了?于是我们考虑观察性质。先考虑几种简单的构造方法。

  • 对于 \(13\) 个数,找所有大小为 \(x\) 的子集。共 \(\binom{13}{x}\) 个。
  • 对于 \(13\) 个数,考虑观察二进制位(也就是拆位),对于每个位按照 \(0, 1\) 分组。共需要 \(2 \times \log(n)\) 个集合。

然后你会发现除了这两种,好像真没有显然的构造方法阿!于是对于两种情况:

  • 考虑组合数最大值 \(\binom{13}{6} = 1716 > 1000\),这怎么就对了???于是你做完了这道题。
  • 显然,\(2 \times \log(n) = 20\) 个。不太够。

实际上,数学上可以证明,\(\binom{13}{6}\) 就是最优的方案总数。

CF1365G Secure Password的更多相关文章

  1. Codeforces 1365G - Secure Password(思维题)

    Codeforces 题面传送门 & 洛谷题面传送门 首先考虑一个询问 \(20\) 次的方案,考虑每一位,一遍询问求出下标的这一位上为 \(0\) 的位置上值的 bitwise or,再一遍 ...

  2. 关于 Spring Security 5 默认使用 Password Hash 算法

    账户密码存储的安全性是一个很老的话题,但还是会频频发生,一般的做法是 SHA256(userInputpwd+globalsalt+usersalt) 并设置密码时时要求长度与大小写组合,一般这样设计 ...

  3. GO语言的开源库

    Indexes and search engines These sites provide indexes and search engines for Go packages: godoc.org ...

  4. ASP.NET MVC 模块与组件(一)——发送邮件

    我的见解: 模块化与组件化是编程的一种思想:提高代码的重用性,提高开发效率. 常见的模块化就是函数与各种类型的封装,若是代码具有更高的重用价值(能够提供给别人使用),建议可以考虑封装成动态链接库(dl ...

  5. Play Framework 完整实现一个APP(十二)

    1.定制CRUD管理页面 > play crud:ov --layout 替换生成文件内容 app/views/CRUD/layout.html #{extends 'admin.html' / ...

  6. 绿色 或者 免安装 软件 PortableApps

    Refer to http://portableapps.com/apps for detail. Below is just a list at Jan-01-2017 for quick show ...

  7. Database Schemas Found in Oracle E-Business Suite

    https://docs.oracle.com/cd/E26401_01/doc.122/e22952/T156458T659606.htm Table of Database Schemas in ...

  8. Gitlab的搭建

    从网上看了一大堆的资料,最终选定按照github上的文档来搭建,虽然本人英文不好,就这样看着 这个博客弯曲完全是拷贝过来的,只为了做个笔记 原文地址:https://github.com/gitlab ...

  9. LaTeX Software & Manuals

    LaTeX Software & Manuals How to Typeset Equations in LaTeX LaTeX is a very powerful tool for typ ...

  10. (八)play之yabe项目【身份验证】

    (八)play之yabe项目[身份验证] 博客分类: 框架@play framework   添加身份验证 play提供了一个模块-Secure(安全模块),用来做身份验证 允许Secure模块 修改 ...

随机推荐

  1. CentOS安装SFTP

    1.创建专用用户组 sudo groupadd sftpgroup # 创建组用于统一管理SFTP用户[1,6](@ref) 2.​添加用户并限制Shell sudo useradd -m -d /d ...

  2. C#之使用线程池

    简述 创建线程是昂贵的操作,所以为每个短暂的异步操作创建线程会产生显著的开销,线程池就是该问题的解决方案,我们事先分配一定的资源,将这些资源放入资源池,每次需要新的资源,只需从池中获取一个,而不用创建 ...

  3. 推荐一个Elasticsearch ES可视化客户端工具:ES-King

    ES-King:开源免费,一个现代.实用的ES GUI客户端,支持多平台. 下载地址:https://github.com/Bronya0/ES-King 功能清单 详尽的集群信息:节点信息.堆内存占 ...

  4. pta求符合给定条件的整数集 C语言

    题目如下 给定不超过6的正整数A,考虑从A开始的连续4个数字.请输出所有由它们组成的无重复数字的3位数. 输入格式: 输入在一行中给出A. 输出格式: 输出满足条件的的3位数,要求从小到大,每行6个整 ...

  5. Linux环境使用apt-get安装telnet、curl、ifconfig、vim、ping等工具【转】

      当在Linux服务器执行Telnet命令时,如果提示command not found: telnet,说明服务器上并未安装Telnet命令,需要安装此命令.下面介绍在linux服务器如何安装te ...

  6. 1.Windows Server 2012 R2安装.NET Framework4.7.1

    1.KB2919442 https://www.microsoft.com/zh-cn/download/confirmation.aspx?id=42153 2.clearcompressionfl ...

  7. AI大模型应用开发入门-LangChain开发RAG增强检索生成

    检索增强生成(RAG)是一种结合"向量检索"与"大语言模型"的技术路线,能在问答.摘要.文档分析等场景中大幅提升准确性与上下文利用率. 本文将基于 LangCh ...

  8. 安装Docker Desktop时出现报错,WSL2 升级更新失败(退出代码: 1603,错误代码: Wsl/CallMsi/Install/ERROR_INSTALL_FAILURE)解决办法

      安装Docker Desktop时出现报错,WSL2 升级更新失败 一.问题 首先遇到的问题是安装docker desktop后,启动引擎时报错 wsl update failed: update ...

  9. 禁止Apache显示文件列表

    通过.htaccess文件 可以在根目录新建或修改 .htaccess 文件中添加 .代码如下: <Files *> Options -Indexes</Files> 就可以禁 ...

  10. vue3+vite+ts 配置@时vscode报找不到__dirname的问题

    vue3+vite+ts 配置@时vscode报找不到__dirname的问题-CSDN博客 原因:path 模块是 node.js 的内置模块,而 node.js 默认不支持 ts 文件的 解决:安 ...