[CF1365G]Secure Password
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相关推荐
- CF1365G Secure Password(构造,交互,二进制分组)
CF1365G Secure Password Solution 妙妙思维题. 注意到(136)>n\binom{13}{6}>n(613)>n.(谁tm能注意到这个?!?) 我们 ...
- 2020-12-02 Centos8.2邮件服务器搭建攻略!一文吃透Postfix+Dovecot+MySQL!
1.jpg 今天来聊聊Linux邮件服务器的搭建,本以为这不是一件很困难的事情,毕竟电子邮件这种高度成熟的技术应该有很容易部属吧,上手后才发现原来坑还真不少.本方案以主流的postfix + dova ...
- RC4算法及其实践(Hello Password)
Hello Password 一个简单的安全密码管理工具. Why? 因为我无法信任网上的密码管理软件.另外,加密数据离开对应的密码管理软件无法解析,这个问题困扰着我. 所以,不如自己写一个简简单单的 ...
- [zt]petshop4.0 详解之八(PetShop表示层设计)
代码中,InsertUser()方法就是负责用户的创建,而在之前则需要判断创建的用户是否已经存在.InsertUser()方法的定义如下: private static bool InsertUser ...
- PetShop之表示层设计 - 《解剖PetShop》系列之六
六 PetShop之表示层设计 表示层(Presentation Layer)的设计可以给系统客户最直接的体验和最十足的信心.正如人与人的相交相识一样,初次见面的感觉总是永难忘怀的.一件交付给客户使用 ...
- 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 ...
- 收藏喜+1!值得使用的100个Python小技巧
目前Python可以说是非常流行,在目前的编程语言中,Python的抽象程度是最高的,是最接近自然语言的,很容易上手. 你可以用它来完成很多任务,比如数据科学.机器学习.Web开发.脚本编写.自动化等 ...
- 快收藏!整理了 100 个 Python 小技巧
作者:小F 来源: 法纳斯特 目前Python可以说是非常流行,在目前的编程语言中,Python的抽象程度是最高的,是最接近自然语言的,很容易上手. 你可以用它来完成很多任务,比如数据科学.机器学习. ...
- 互联网安全威胁及应对方案
一,互联网web应用面临的主要威胁 1. XSS 跨站脚本攻击(Cross Site Scripting), 即A站点的网页想办法跑到B站点上. 因为我们的网页都是javascript驱动的,所以js ...
最新文章
- node_modules中包不完整的解决方法
- LeetCode 01两数之和02两数相加
- MYSQL专题-MySQL三大日志binlog、redo log和undo log
- 数学 希腊字母 Greek Alphabet
- php表白情话,向一个人表白 抖音最火99句情话告白
- linux 远程图形终端,图形终端远程操作Linux
- java某个类避免findbug检查_Findbugs能否在java中检测到捕获RuntimeException?
- Maverick.Net介绍 (来自http://www.cnblogs.com/RicCC/archive/2006/09/17/506890.html)
- linux on android分区,android 分区大小 地址查看
- v4l2API无法执行VIDIOC_DQBUF的问题
- windows配置phpredis
- 【转载】教你使用 Reflexil 反编译.NET
- Linux文件系统管理
- 修正统计的 5 个方法
- 初次编译cximage遇到的一些错误
- knockout的监控数组实现 - 司徒正美
- pycharm使用清华镜像源提高下载速度 只需要五步完成
- u盘的大小在计算机无法显示,U盘格式化后插入电脑打不开,不显示U盘大小怎么解决?...
- 设计模式笔记-----七大原则
- h5公众号分享朋友、朋友圈