记一道有趣的交互题 noi.ac #2035歪比巴卜
记一道有趣的交互题 noi.ac #2035歪比巴卜
Problem
Alice手上有两个\(\le n\)且不同的正整数\(x,y\),Bob手上有一个正整数\(z\),已经确认是\(x\)或\(y\)中的某一个。 现在除了Alice可以告诉Bob一个正整数\(k\)外,两人不能有任何交流,而Bob需要根据这个数确定\(z=x\)还是\(z=y\)。 请你实现一个程序,帮助Alice决定正整数\(k\),以及帮助Bob根据\(k\)确定\(z=x\)还是\(z=y\)。
你需要实现下面的三个函数:
void init()
对你的程序进行初始化。该函数只会在程序开始运行时被调用恰好一次。
int helpAlice(int x,int y)}
给定一组互不相同的\(x,y\),你要帮助Alice确定kk,并将其作为返回值返回。不是正整数的返回值会导致你获得0分。
int helpBob(int z,int k)
给定一组\(z,k\),保证z是之前某次调用helpAlice(x,y)中的\(x\)或\(y\),且\(k\)是那次调用函数的返回值。 你要帮助Bob确定\(z=x\)还是\(z=y\)并返回相应的值,若\(z=x\),返回1,否则一定有\(z=y\),返回0。不正确的返回值会导致你获得0分。
评测时,交互程序将会首先调用一次init(),然后调用不超过T次helpAlice()和helpBob(),如果任何一次调用的返回值不合法或不正确, 则直接结束并返回00分。如果全部正确,则按照如下如下标准评分:
令所有helpAlice()的返回值中的最大值为R,则你的得分为:

评测时,保证交互程序使用的时间不超过0.5s,空间不超过128MB。
Example
样例
假设交互程序依次调用了如下函数,则一种合法的返回值如下所示:

数据范围与约定
对于\(100\%\)的数据,\(n=920\),\(T=3\times10^6\)。
Solution
首先讲讲交互格式。
最好的方法就是列出1分的代码,应该就可以立马懂了。
void init()
{
}
int helpAlice(int x,int y)
{
return x;
}
int helpBob(int z,int k)
{
if(k==z) return 1;
return 0;
}
\(x,y\le920\),而要得满分则需要做到\(R\le12\)。
这\(920\)和\(12\)之间有什么联系呢?恐怕只有出题人才能想得到吧……
发现\(\binom{12}{6}=924>920\),所以可以将从112中选6个的方案来唯一表示1920中的每一个数。
准确地,对于每次调用函数helpAlice(),记表示\(x\)的集合为\(X\),表示\(y\)的集合为\(Y\),我们找到任意一个在\(X\)当中且不在\(Y\)当中的元素并将其返回。(由于\(x\neq y\),这样的元素必定存在,)
对于每次调用函数helpBob(),记表示\(z\)的集合为\(Z\),若\(k\in Z\),则说明\(z=x\);否则说明\(z=y\).
这样,我们就在tyq把香农的棺材板撬开之前做完了这道题,时间复杂度\(O(2^{12}+T)\).
Code
/**************************************************************
* Problem:
* Author: Vanilla_chan
* Date: 20210318
**************************************************************/
int a[924],h[4096],cnt;
void dfs(int x,int y,int z)
{
if(x==12&&y==6)
{
a[cnt++]=z;
return;
}
if(x<12&&y<=6) dfs(x+1,y,z),dfs(x+1,y+1,z+(1<<x));
}
void init()
{
dfs(0,0,0);
for(int i=1;i<4096;i++)
{
if(i&1) h[i]=0;
else h[i]=h[i>>1]+1;
}
}
int helpAlice(int x,int y)
{
x--;
y--;
return h[a[x]&(~a[y])]+1;
}
int helpBob(int z,int k)
{
z--;
k--;
if(a[z]>>k&1) return 1;
return 0;
}
记一道有趣的交互题 noi.ac #2035歪比巴卜的更多相关文章
- 记一道有趣的Twitter面试题
微信上的“程序员的那些事”想必是很多码农们关注的公众账号之一,我也是其粉丝,每天都会看看里面有没有什么趣事,前段时间“程序员的那些事”分享了一篇博文<我的Twitter技术面试失败了>挺有 ...
- 记一道有意思的算法题Rotate Image(旋转图像)
题出自https://leetcode.com/problems/rotate-image/ 内容为: You are given an n x n 2D matrix representing an ...
- javascript基础修炼(13)——记一道有趣的JS脑洞练习题
目录 一. 题目 二. 解法风暴 示例代码托管在:http://www.github.com/dashnowords/blogs 博客园地址:<大史住在大前端>原创博文目录 华为云社区地址 ...
- javascript基础修炼(13)——记一道有趣的JS脑洞练习题【华为云技术分享】
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/devcloud/article/detai ...
- 记一道CTF隐写题解答过程
0x00 前言 由于我是这几天才开始接触隐写这种东西,所以作为新手我想记录一下刚刚所学.这道CTF所需的知识点包括了图片的内容隐藏,mp3隐写,base64解密,当铺解密,可能用到的工具包括bin ...
- 记一道C语言编程题(C语言学习笔记)
题目如下 解答如下 #include <stdio.h> #include<math.h> double Mysqrt(double n) { return sqrt(n); ...
- NOI.AC NOIP模拟赛 第二场 补记
NOI.AC NOIP模拟赛 第二场 补记 palindrome 题目大意: 同[CEOI2017]Palindromic Partitions string 同[TC11326]Impossible ...
- NOI.AC NOIP模拟赛 第一场 补记
NOI.AC NOIP模拟赛 第一场 补记 candy 题目大意: 有两个超市,每个超市有\(n(n\le10^5)\)个糖,每个糖\(W\)元.每颗糖有一个愉悦度,其中,第一家商店中的第\(i\)颗 ...
- NOI.AC NOIP模拟赛 第四场 补记
NOI.AC NOIP模拟赛 第四场 补记 子图 题目大意: 一张\(n(n\le5\times10^5)\)个点,\(m(m\le5\times10^5)\)条边的无向图.删去第\(i\)条边需要\ ...
- NOI.AC NOIP模拟赛 第三场 补记
NOI.AC NOIP模拟赛 第三场 补记 列队 题目大意: 给定一个\(n\times m(n,m\le1000)\)的矩阵,每个格子上有一个数\(w_{i,j}\).保证\(w_{i,j}\)互不 ...
随机推荐
- Bash Shell 30min 过家家
带你捅破窗户纸 - 备注 : @博客园 : 1. 为什么不支持 pdf 上传了呀 2. 网站分类不好用 3. 排版OA工具升级下, 例如 markdown 写出来好丑. 尝试升级下呢 ? 后记: 学如 ...
- 解决本地代理问题 git 或者 curl Failed to connect to 127.0.0.1 port 1087 after 8 ms: Connection refused
问题出现原因 git配置了代理 本地配置了代理 执行这个命令可以看到自己的代理设置: env | grep -I proxy 临时更改代理 在当前终端执行以下命令,就可以临时将代理取消掉 export ...
- go declared and not used
Go语言在代码规范中定义未使用的变量会报"declared and not used"错误 package main import "fmt" func mai ...
- 最新活动 ISS 国际空间站 MAI-75 SSTV活动计划于2020年8月4日至5日
MAI-75 SSTV活动计划于2020年8月4日和5日举行 8月3日至9日这一周的最后宇航员时间表最近公布了,它显示了定于8月4日和5日进行的MAI-75活动.这是在Space X Demo-2脱 ...
- Python 加上颜色进行输出
博客地址:https://www.cnblogs.com/zylyehuo/ print(f"\033[42m文本内容\033[0m")
- 开源组件DockerFIle老是Build失败,如何解决
推荐把外网地址替换为国内高速镜像 # 替换源地址 http://dl-cdn.alpinelinux.org/alpine === https://mirrors.aliyun.com/alpine ...
- 入门Dify平台:知识库分析
今天,我们来简单了解一下 Dify 的知识库功能.其实,它并没有想象中那么复杂或难以操作.无论是 Dify 还是其他类似平台,都已经将知识库的功能封装得非常完善.你可以直接把它当作一个云端的记事本,内 ...
- 史上最全EffectiveJava总结(二)
方法 49.检查参数的有效性 每次编写方法或构造函数时,都应该考虑参数存在哪些限制,并在文档中记录下来,然后在方法的开头显式地检查. 如果没有在方法开头就验证参数,可能会违反故障原子性.因为方法可能会 ...
- 面试题:Linux 系统基础 (二)
Linux系统中的定时任务有哪些类型,它们是如何配置的? Linux系统中的定时任务主要有两种类型:Cron作业和at作业. 1.Cron作业: 使用crontab命令配置和管理. 配置周期性执行的任 ...
- 一些CF上的补题0504
知识点模块 1.通过三点计算三角形的面积可以这样写 area=fabs(x1*y2-x2*y1+x2*y3-x3*y2+x3*y1-x1*y3)/2; 2.最小公倍数与最大公约数 x×y=gcd(x, ...