记一道有趣的交互题 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歪比巴卜的更多相关文章

  1. 记一道有趣的Twitter面试题

    微信上的“程序员的那些事”想必是很多码农们关注的公众账号之一,我也是其粉丝,每天都会看看里面有没有什么趣事,前段时间“程序员的那些事”分享了一篇博文<我的Twitter技术面试失败了>挺有 ...

  2. 记一道有意思的算法题Rotate Image(旋转图像)

    题出自https://leetcode.com/problems/rotate-image/ 内容为: You are given an n x n 2D matrix representing an ...

  3. javascript基础修炼(13)——记一道有趣的JS脑洞练习题

    目录 一. 题目 二. 解法风暴 示例代码托管在:http://www.github.com/dashnowords/blogs 博客园地址:<大史住在大前端>原创博文目录 华为云社区地址 ...

  4. javascript基础修炼(13)——记一道有趣的JS脑洞练习题【华为云技术分享】

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/devcloud/article/detai ...

  5. 记一道CTF隐写题解答过程

      0x00 前言 由于我是这几天才开始接触隐写这种东西,所以作为新手我想记录一下刚刚所学.这道CTF所需的知识点包括了图片的内容隐藏,mp3隐写,base64解密,当铺解密,可能用到的工具包括bin ...

  6. 记一道C语言编程题(C语言学习笔记)

    题目如下 解答如下 #include <stdio.h> #include<math.h> double Mysqrt(double n) { return sqrt(n); ...

  7. NOI.AC NOIP模拟赛 第二场 补记

    NOI.AC NOIP模拟赛 第二场 补记 palindrome 题目大意: 同[CEOI2017]Palindromic Partitions string 同[TC11326]Impossible ...

  8. NOI.AC NOIP模拟赛 第一场 补记

    NOI.AC NOIP模拟赛 第一场 补记 candy 题目大意: 有两个超市,每个超市有\(n(n\le10^5)\)个糖,每个糖\(W\)元.每颗糖有一个愉悦度,其中,第一家商店中的第\(i\)颗 ...

  9. NOI.AC NOIP模拟赛 第四场 补记

    NOI.AC NOIP模拟赛 第四场 补记 子图 题目大意: 一张\(n(n\le5\times10^5)\)个点,\(m(m\le5\times10^5)\)条边的无向图.删去第\(i\)条边需要\ ...

  10. NOI.AC NOIP模拟赛 第三场 补记

    NOI.AC NOIP模拟赛 第三场 补记 列队 题目大意: 给定一个\(n\times m(n,m\le1000)\)的矩阵,每个格子上有一个数\(w_{i,j}\).保证\(w_{i,j}\)互不 ...

随机推荐

  1. Raft学习笔记

    0.前言 Raft 作为一种强一致性的共识算法,被广泛应用于分布式系统中,如 etcd.Consul 等.最近阅读了一篇关于 Raft 的技术文章,收获颇多,因此写下此学习笔记,记录其中的关键概念与个 ...

  2. Pydantic递归模型深度校验36计:从无限嵌套到亿级数据的优化法则

    title: Pydantic递归模型深度校验36计:从无限嵌套到亿级数据的优化法则 date: 2025/3/26 updated: 2025/3/26 author: cmdragon excer ...

  3. 【SpringCloud】Zookeeper服务注册与发现

    Zookeeper服务注册与发现 Eureka停止更新了,你怎么办 https://github.com/Netflix/eureka/wiki SpringCloud整合Zookeeper替代Eur ...

  4. CoreOS 更新重启后, 所有容器服务全部停掉了

    今天有几个服务出问题了,上去看了下,这台 CoreOS 下的所有容器服务竟然全部停掉了,好奇怪,启动容器时明明加了--detach参数了呀. 问题原因 想了想,会不是是 CoreOS 更新重启导致的, ...

  5. ChatGTP获取的d读取excel通用程序。

    procedure ReadExcelFile(const FileName: string; AMemtable: TFDmemtable); var ExcelApp: OleVariant; S ...

  6. RAG, GraphRAG, LightRAG, and KAG

    KAG: A Better Alternative to RAG for Domain-Specific Knowledge Applications https://medium.com/@ahme ...

  7. 深入理解Java虚拟机-JAVA内存模型与线程

    Java内存模型(JMM) JMM 的核心概念 主内存与工作内存: 主内存(Main Memory)是所有线程共享的内存区域,存放着所有变量的值 每个线程都有自己的 工作内存(Working Memo ...

  8. 使用python批量爬取wallhaven.cc壁纸站壁纸

    偶然发现https://wallhaven.cc/这个壁纸站的壁纸还不错,尤其是更新比较频繁,用python写个脚本爬取 点latest,按照更新先后排序,获得新地址,发现地址是分页展示的,每一页24 ...

  9. hadoop集群搭建(亲测笔记)

    ------步骤: 准备3台机器 同步时间 配置主机名 配置主机名ip映射 免密登录 关闭防火墙 搭建zookeeper集群 搭建hadoop 准备3台机器 我通过VMware workstation ...

  10. 使用TypeScript开发微信小程序(云开发)-入门篇

    配置小程序云开发 TypeScript 环境 1. 检查本地 nodejs 环境 2. 安装 TypeScript npm install typescript --save-dev 3. 初始化/配 ...