CF1365G Secure Password
\(\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的更多相关文章
- Codeforces 1365G - Secure Password(思维题)
Codeforces 题面传送门 & 洛谷题面传送门 首先考虑一个询问 \(20\) 次的方案,考虑每一位,一遍询问求出下标的这一位上为 \(0\) 的位置上值的 bitwise or,再一遍 ...
- 关于 Spring Security 5 默认使用 Password Hash 算法
账户密码存储的安全性是一个很老的话题,但还是会频频发生,一般的做法是 SHA256(userInputpwd+globalsalt+usersalt) 并设置密码时时要求长度与大小写组合,一般这样设计 ...
- GO语言的开源库
Indexes and search engines These sites provide indexes and search engines for Go packages: godoc.org ...
- ASP.NET MVC 模块与组件(一)——发送邮件
我的见解: 模块化与组件化是编程的一种思想:提高代码的重用性,提高开发效率. 常见的模块化就是函数与各种类型的封装,若是代码具有更高的重用价值(能够提供给别人使用),建议可以考虑封装成动态链接库(dl ...
- Play Framework 完整实现一个APP(十二)
1.定制CRUD管理页面 > play crud:ov --layout 替换生成文件内容 app/views/CRUD/layout.html #{extends 'admin.html' / ...
- 绿色 或者 免安装 软件 PortableApps
Refer to http://portableapps.com/apps for detail. Below is just a list at Jan-01-2017 for quick show ...
- 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 ...
- Gitlab的搭建
从网上看了一大堆的资料,最终选定按照github上的文档来搭建,虽然本人英文不好,就这样看着 这个博客弯曲完全是拷贝过来的,只为了做个笔记 原文地址:https://github.com/gitlab ...
- LaTeX Software & Manuals
LaTeX Software & Manuals How to Typeset Equations in LaTeX LaTeX is a very powerful tool for typ ...
- (八)play之yabe项目【身份验证】
(八)play之yabe项目[身份验证] 博客分类: 框架@play framework 添加身份验证 play提供了一个模块-Secure(安全模块),用来做身份验证 允许Secure模块 修改 ...
随机推荐
- EBC Rev.5中的中间品、消费品,资本品,HS2012,HS2017与EBC Rev.5对照表,各种贸易标准对照表....
最近在做一个国际供应链问题研究,用到了中间品这个概念,在各大论坛逛了好久居然没有找到一个说清楚了的,某些论坛需要什么点数才能下载,论坛用户更是自视甚高,一副这也不懂的姿态审视所有刚入门这个领域的新人, ...
- useEffect的那些坑,你知道多少
@charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 14px; o ...
- C#交换方法指针
被引用的dll是testDllFr.dll,其代码为: namespace testDLLFr { public class TestA { public static void TestAM() { ...
- RocketMQ源码详解(NameServer、Producer)
NameServer 架构设计 消息中间件的设计思路一般是基于主题订阅发布的机制,消息生产者(Producer)发送某一个主题到消息服务器,消息服务器负责将消息持久化存储,消息消费者(Consumer ...
- length与capacity
package javaBasic; public class DifferenceLengthCapacity { public static void main(String[] args) { ...
- Prompt 攻击与防范:大语言模型安全的新挑战
随着大语言模型(LLM)在企业服务.智能助手.搜索增强等领域的广泛应用,围绕其"Prompt"机制的安全问题也逐渐引起关注.其中最具代表性的,就是所谓的 Prompt Inject ...
- Java线程状态和状态切换
背景 先来探讨一个关于多线程的基础知识:java线程有多少种状态?根据JDK定义,答案是六种!为什么很多人给出的答案却是五种呢?这极有可能是将操作系统层面的线程状态和Java线程状态混为一谈了.因 ...
- java 腾讯云、阿里云SMS短信工具类
引入POM依赖 <!-- 腾讯云SMS SDK --> <dependency> <groupId>com.tencentcloudapi</groupId& ...
- 启智树提高组day1T1 3436 : A:Doughnut
启智树提高组day1T1 3436 : A:Doughnut 原题传送门 题目描述 Aloisia有很多很多甜甜圈.有一天,她在地上画了n+1个格子,想从第1个格子跳到第n+1个格子.规则是,Aloi ...
- ArkUI-X与Android桥接通信之方法回调
平台桥接用于客户端(ArkUI)和平台(Android或iOS)之间传递消息,即用于ArkUI与平台双向数据传递.ArkUI侧调用平台的方法.平台调用ArkUI侧的方法.本文主要介绍Android平台 ...