3s 1G
在洛谷上提交时,请使用不低于 C++17 的语言版本,并且无需添加 binary.h 头文件。
小 H 在学习二进制运算的过程中遇到了一个经典问题:给定一个初始为 的整数,每次操作可以将其乘 或加 ,求将其变为某个给定正整数 的最少操作次数。小 H 发现,这可以根据 的二进制表示求出答案。
基于这个问题,小 H 提出了以下问题:给定两个正整数 ,定义一次操作为以下四种之一:
- 将 乘 ,即 ;
- 将 乘 ,即 ;
- 将 加 ,即 ;
- 将 加 ,即 。
小 H 想知道最少需要多少次操作,才能使得 和 相等。你需要帮助小 H 求出操作次数的最小值。
【实现细节】
选手不需要,也不应该实现 main 函数。
选手需要确保提交的程序包含头文件 binary.h,即在程序开头加入以下代码:
选手需要在提交的程序源文件 binary.cpp 中实现以下两个函数:
- 分别表示测试点编号与测试数据组数。 表示该测试点为样例。
- 对于每个测试点,该函数会在程序开始运行时被交互库调用恰好一次。
long long binary(long long x, long long y);
- 表示给定的两个数。
- 该函数需要返回操作次数的最小值。
- 对于每个测试点,该函数会被交互库调用恰好 次。
注意:在任何情况下,交互库运行所需时间均不会超过 秒,所用内存为固定大小,且均不超过 MiB。
【测试程序方式】
试题目录下的 grader.cpp 是交互库参考实现,最终测试时所用的交互库实现与该参考实现有所不同,因此选手的解法不应该依赖交互库实现。
选手可以在本题目下使用如下命令编译得到可执行程序:
g++ grader.cpp binary.cpp -o binary -O2 -std=c++14 -static