AT_1_stpc2025_1_k.Two-Way Communication
通过率:0%
AC君温馨提醒
该题目为【atcoder】题库的题目,您提交的代码将被提交至atcoder进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
有两个程序 Alice 和 Bob 协作进行如下游戏。
存在两个整数 A,B,满足 0≤A,B<264。最初只有 Alice 知道 A,只有 Bob 知道 B。
令 C:=min(A,B)。游戏的目标是让 Alice 和 Bob 都能够回答出 C 的值。
为此,Alice 和 Bob 可以多次调用下列函数进行信息交流。
send(x):等待对方程序调用receive()。随后,向对方发送 1 个比特的值 x。receive():等待对方程序调用send()。随后,接收来自对方的 1 个比特值 x,并返回该值。交流结束后,每个程序需调用以下函数一次,输出 C 的值。
answer(x):回答 C 的值为 x。调用该函数后,程序必须立即退出。若 Alice 和 Bob 均正确输出了 C,则本次游戏成功。此时,
send()函数的总调用次数越少,得分越高。
请设计两个程序 Alice 与 Bob,在尽量少的函数调用次数下使游戏成功。
输入格式
本题为【交互题】(你的程序需要与评测程序通过标准输入输出进行交互)。
你的程序将分别作为 Alice 或 Bob 运行,通过评测程序协同完成游戏。
程序启动
你的程序首先会收到如下格式的输入:
Player X
其中,Player 是字符串 Alice 或 Bob,X 是 0≤X<264 的整数。
- 当 $\text{Player} = $
Alice时,代表 A=X,你的程序从此作为 Alice 运行。 - 当 $\text{Player} = $
Bob时,代表 B=X,你的程序从此作为 Bob 运行。
随后,请按照下述方式调用 send()、receive()、answer():
send
调用 send 函数时,请输出:
send x
其中 x 必须是 0 或 1。
发送操作会阻塞,直到对方程序调用 receive() ;如两端都调用 send 或有一方提前结束,判为 WA。
receive
调用 receive 函数时,请输出:
receive
随后,从对方程序读取如下输入,获取其传来的 x:
x
此操作将阻塞直到对方调用 send。若在交互过程中收到 −1,表明判为 WA,请立即退出程序。
answer
调用 answer 函数时,请输出:
answer x
其中 x 必须等于 min(A,B)。调用后需立即退出程序。
说明/提示
评分
对于一个测试用例,Alice 与 Bob 的两程序调用 send() 的总次数为 Q′。取所有测试用例中 Q′ 的最大值 Q,得分计算如下:
- 若 Q≤76,得 100 分;
- 若 76<Q≤128,得 ⌊100−27⋅ln(2Q−74)⌋ 分;
- 若 Q>128,得分为 0(即判为 WA);
注意事项
- 每次输出都要以换行结尾并
flush标准输出,否则可能因 TLE 被判失败。 - 测评时,Alice、Bob 程序与评测程序将一同运行。你的程序的时间与内存消耗为三者之和,请注意预留空间。
- 评测程序大约消耗 50ms、5MiB。
- 本题运行中不可新建文件,否则会判为 WA。例如 C# 需使用 C# AOT 替代标准 C# 环境。
- 所有整数均在 [0,264) 范围之内,注意防止溢出。
输入输出样例
| Alice 的输入 | Alice 的输出 | Bob 的输入 | Bob 的输出 | 说明 |
|---|---|---|---|---|
Alice31 |
send 0receive1send 1receiveanswer 25 |
Bob25 |
receive0send 1receive1answer 25 |
例子 |
由 ChatGPT 5 翻译
输入解题思路,AI测评打分。不知道怎么写?