Secure Password

题解

挺水的一道构造题

由于只能询问13次,所以我们的询问次数只能比 l o g n log\, n logn多一点点,常数甚至不能超过1.5。那个黑心出题人会这样卡
而 l o g n log\, n logn的询问次数有令我们想到了二进制拆分。
但是,由于 [ 1 , 1000 ] [1,1000] [1,1000]的下标的二进制位有包含的关系,我们不得不把每位为1与每位为0的都跑一遍,询问次数达到了 2 l o g n 2log_{n} 2logn​,肯定过不了。

但考虑一下,我们之所以需要正反都跑一遍是因为存在包含的关系,如何使得下标之间不存在包含关系呢?
离散化可以解决这个问题。当然,这里是让值变得更散。我们发现,由于询问最高可达13次,我们可以把下标离散成小于 2 13 2^{13} 213的数。
又要让离散后的数没有包含的关系,所有离散的数的为1的二进制位必须相等。当然,不相等也可以做,但太麻烦了。
我们发现 C 13 5 = 1287 > 1000 C_{13}^{5}=1287>1000 C135​=1287>1000,所以我们离散的数为1的位数为5就已经可以过了,但为了让其价值最大化,还是枚举6位。
我们将每个下标离散成有6个位为1的数后,对于每一个二进制位,求出当前位上为1的下标的或和值即可。容易证明,对于一个数,其取反的位数的为1位的或和值刚好包含除它以外的所有数。

源码

#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
#include<map>
#include<set>
using namespace std;
#define MAXN 1005
typedef long long LL;
const int INF=0x7f7f7f7f;
typedef unsigned long long uLL;
typedef pair<int,int> pii;
template<typename _T>
void read(_T &x){_T f=1;x=0;char s=getchar();while('0'>s||'9'<s){if(s=='-')f=-1;s=getchar();}while('0'<=s&&s<='9'){x=(x<<3)+(x<<1)+(s^48);s=getchar();}x*=f;
}
int n,id[MAXN];LL w[20];
vector<int> vec[20];
signed main(){read(n);int lim=0,num=(1<<6)-2;while(lim<n){num++;if(__builtin_popcount(num)!=6)continue;lim++;//printf("%d %d\n",lim,num);for(int i=0;i<13;i++)if(!((num>>i)&1))vec[i].push_back(lim);id[lim]=num;}for(int i=0;i<13;i++){if(vec[i].empty())continue;int siz=vec[i].size();printf("? %d",siz);for(int j=0;j<siz;j++)printf(" %d",vec[i][j]);puts("");fflush(stdout);read(w[i]);}printf("!");for(int i=1;i<=n;i++){LL ans=0;for(int j=0;j<13;j++)if((id[i]>>j)&1)ans|=w[j];printf(" %lld",ans);}puts("");return 0;
}
/*
1111110000000
0000001111110
*/

谢谢!!!

[CF1365G]Secure Password相关推荐

  1. CF1365G Secure Password(构造,交互,二进制分组)

    CF1365G Secure Password Solution 妙妙思维题. 注意到(136)>n\binom{13}{6}>n(613​)>n.(谁tm能注意到这个?!?) 我们 ...

  2. 2020-12-02 Centos8.2邮件服务器搭建攻略!一文吃透Postfix+Dovecot+MySQL!

    1.jpg 今天来聊聊Linux邮件服务器的搭建,本以为这不是一件很困难的事情,毕竟电子邮件这种高度成熟的技术应该有很容易部属吧,上手后才发现原来坑还真不少.本方案以主流的postfix + dova ...

  3. RC4算法及其实践(Hello Password)

    Hello Password 一个简单的安全密码管理工具. Why? 因为我无法信任网上的密码管理软件.另外,加密数据离开对应的密码管理软件无法解析,这个问题困扰着我. 所以,不如自己写一个简简单单的 ...

  4. [zt]petshop4.0 详解之八(PetShop表示层设计)

    代码中,InsertUser()方法就是负责用户的创建,而在之前则需要判断创建的用户是否已经存在.InsertUser()方法的定义如下: private static bool InsertUser ...

  5. PetShop之表示层设计 - 《解剖PetShop》系列之六

    六 PetShop之表示层设计 表示层(Presentation Layer)的设计可以给系统客户最直接的体验和最十足的信心.正如人与人的相交相识一样,初次见面的感觉总是永难忘怀的.一件交付给客户使用 ...

  6. CentOS源码安装GitLab汉化版第3版

    软件版本: 软件 版本 CentOS 7.5 GraphicsMagick 1.3.31 Git 2.21.0 Ruby 2.5.3 Go 1.12 Node.js 10.15.2 PostgreSQ ...

  7. 收藏喜+1!值得使用的100个Python小技巧

    目前Python可以说是非常流行,在目前的编程语言中,Python的抽象程度是最高的,是最接近自然语言的,很容易上手. 你可以用它来完成很多任务,比如数据科学.机器学习.Web开发.脚本编写.自动化等 ...

  8. 快收藏!整理了 100 个 Python 小技巧

    作者:小F 来源: 法纳斯特 目前Python可以说是非常流行,在目前的编程语言中,Python的抽象程度是最高的,是最接近自然语言的,很容易上手. 你可以用它来完成很多任务,比如数据科学.机器学习. ...

  9. 互联网安全威胁及应对方案

    一,互联网web应用面临的主要威胁 1. XSS 跨站脚本攻击(Cross Site Scripting), 即A站点的网页想办法跑到B站点上. 因为我们的网页都是javascript驱动的,所以js ...

最新文章

  1. node_modules中包不完整的解决方法
  2. LeetCode 01两数之和02两数相加
  3. MYSQL专题-MySQL三大日志binlog、redo log和undo log
  4. 数学 希腊字母 Greek Alphabet
  5. php表白情话,向一个人表白 抖音最火99句情话告白
  6. linux 远程图形终端,图形终端远程操作Linux
  7. java某个类避免findbug检查_Findbugs能否在java中检测到捕获RuntimeException?
  8. Maverick.Net介绍 (来自http://www.cnblogs.com/RicCC/archive/2006/09/17/506890.html)
  9. linux on android分区,android 分区大小 地址查看
  10. v4l2API无法执行VIDIOC_DQBUF的问题
  11. windows配置phpredis
  12. 【转载】教你使用 Reflexil 反编译.NET
  13. Linux文件系统管理
  14. 修正统计的 5 个方法
  15. 初次编译cximage遇到的一些错误
  16. knockout的监控数组实现 - 司徒正美
  17. pycharm使用清华镜像源提高下载速度 只需要五步完成
  18. u盘的大小在计算机无法显示,U盘格式化后插入电脑打不开,不显示U盘大小怎么解决?...
  19. 设计模式笔记-----七大原则
  20. h5公众号分享朋友、朋友圈

热门文章

  1. 『SQLServer系列教程』——事务详解
  2. 企业老板青睐于MBA,不止是学历镀金这么简单
  3. Luogu 1402 酒店之王(二分图最大匹配)
  4. 人民币汇率破7,跨境电商卖家,现在提款划算吗?
  5. TiDB一个大数据实时计算的存储利器
  6. iOS之解析ips文件
  7. OFDM循环前缀及其作用(矩阵视角解释)
  8. python修炼之道_Pythonic:Python 修炼之道
  9. jupyter notebook新建python3空白_jupyter notebook打开空白
  10. 面试001+自己经历的