#P15245. [WC2026] 二进制

    ID: 15288 远端评测题 3000ms 1024MiB 尝试: 0 已通过: 0 难度: 8 上传者: 标签>贪心交互题O2优化位运算2026WC

[WC2026] 二进制

说明

小 H 在学习二进制运算的过程中遇到了一个经典问题:给定一个初始为 00 的整数,每次操作可以将其乘 22 或加 11,求将其变为某个给定正整数 xx 的最少操作次数。小 H 发现,这可以根据 xx 的二进制表示求出答案。

基于这个问题,小 H 提出了以下问题:给定两个正整数 x,yx, y,定义一次操作为以下四种之一:

  1. xx22,即 x2xx \leftarrow 2x
  2. yy22,即 y2yy \leftarrow 2y
  3. xx11,即 xx+1x \leftarrow x + 1
  4. yy11,即 yy+1y \leftarrow y + 1

小 H 想知道最少需要多少次操作,才能使得 xxyy 相等。你需要帮助小 H 求出操作次数的最小值。

【实现细节】

选手不需要,也不应该实现 main 函数。

选手需要确保提交的程序包含头文件 binary.h,即在程序开头加入以下代码:

#include "binary.h"

选手需要在提交的程序源文件 binary.cpp 中实现以下两个函数:

void init(int c, int t);
  • c,tc, t 分别表示测试点编号与测试数据组数。c=0c = 0 表示该测试点为样例。
  • 对于每个测试点,该函数会在程序开始运行时被交互库调用恰好一次。
long long binary(long long x, long long y);
  • x,yx, y 表示给定的两个数。
  • 该函数需要返回操作次数的最小值。
  • 对于每个测试点,该函数会被交互库调用恰好 tt 次。

注意:在任何情况下,交互库运行所需时间均不会超过 1.81.8 秒,所用内存为固定大小,且均不超过 6464 MiB。

【测试程序方式】

试题目录下的 grader.cpp 是交互库参考实现,最终测试时所用的交互库实现与该参考实现有所不同,因此选手的解法不应该依赖交互库实现。

选手可以在本题目下使用如下命令编译得到可执行程序:

g++ grader.cpp binary.cpp -o binary -O2 -std=c++14 -static

输入格式

对于编译得到的可执行程序:

  • 可执行文件将从标准输入读入以下格式的数据:
    • 输入的第一行包含两个非负整数 c,tc, t,分别表示测试点编号和测试数据组数。
    • 接下来依次为每组测试数据,对于每组测试数据:
      • 第一行包含两个正整数 x,yx, y,表示给定的两个数。

输出格式

  • 可执行文件将输出以下格式的数据至标准输出:
    • 对于每组测试数据,输出一行一个整数,表示操作次数的最小值。
0 5
1 2
1 5
3 6
7 33
5 9
1
3
1
4
2

提示

【下发文件说明】

在本试题目录下:

  1. grader.cpp 是提供的交互库参考实现。
  2. binary.h 是头文件,选手不用关心具体内容。
  3. template_binary.cpp 是提供的示例代码,选手可参考并实现自己的代码。

选手注意对所有下发文件做好备份。最终评测时只测试本试题目录下的 binary.cpp,对该程序以外文件的修改不会影响评测结果。

【数据范围】

对于所有测试数据,均有:

  • 1t5×1071 \le t \le 5 \times 10^7
  • 1x<y10181 \le x < y \le 10^{18}

::cute-table{tuack}

测试点编号 t=t = yy \le 特殊性质
141 \sim 4 1010
55 10210^2 B
66 ^
7,87,8 10310^3 B
9119 \sim 11 ^
1212 1010 10610^6 A
1313 ^ ^
1414 10610^6 A
1515 ^ B
1616
17,1817,18 101810^{18} B
192119 \sim 21 ^
222422 \sim 24 2.5×1072.5 \times 10^7 ^
2525 5×1075 \times 10^7
  • 特殊性质 A:yx103y - x \le 10^3
  • 特殊性质 B:存在 k1k \ge 10z<2k0 \le z < 2^k 满足 y=x×2k+zy = x \times 2^k + z

【评分方式】

注意:

  • 选手不应当通过非法方式获取交互库的内部信息,如直接与标准输入、输出流进行交互。此类行为将被视为作弊;
  • 最终的评测交互库与样例交互库的实现不同。

本题首先会受到和传统题相同的限制,例如编译错误会导致整道题目得 00 分,运行时错误、超过时间限制、超过空间限制等会导致相应测试点得 00 分。选手只能在程序中访问自己定义的变量以及交互库给出的变量,尝试访问其他地址空间可能导致编译错误或运行错误。

在上述条件基础上:

  • 对于每个测试点,程序得到满分当且仅当每次调用 binary 函数时返回的答案均正确。