年轻且疯狂相爱的 Bajtek 和 Bajtyna 陷入了困境。邪恶的巫师 Bitocy 绑架了 Bajtyna,希望能勒索一笔巨额赎金。然而,Bajtek 并没有放弃——他虽然并不富有,但决定救出他的爱人。Bitocy 不喜欢肉搏,因此他提出了另一种解决方式:如果这位年轻人能猜出 Bajtyna 被关在塔的哪一层,巫师就会放她走。
塔楼有很多层,编号从 $1$ 到 $n$。Bajtek 唯一的帮助是向巫师提问。问题必须是“Bajtyna 是否在 $x$ 层之上/之下?”的形式。当然,Bajtek 可以选择“之上”或“之下”中的任意一个词,并自由设定数字 $x$。Bitocy 总是如实回答,但如果回答为“是”,他会要求支付 $a$ 个 bajtalar,如果回答为“否”,则要求支付 $b$ 个 bajtalar。如果 Bajtek 变得太穷,而 Bitocy 变得太富有,Bajtyna 可能就会选择留在巫师那里……
Bajtek 正在思考该问什么问题。不幸的是,Bajtyna 能听到所有的对话,即 Bajtek 的连续提问和 Bitocy 的回答,而且她是一个非常节俭的人。如果 Bajtek 花费的钱超过了(在最坏情况下)确定她位置所需的最小金额,她就会对他感到非常失望,并与 Bitocy 一起离开。更准确地说,如果在对话的某个时刻,可以推断出从那一刻起,无论 Bitocy 后续如何回答,Bajtek 都能以不超过 $K$ 个 bajtalar 的花费猜出 Bajtyna 的位置,而从那一刻起 Bajtek 花费的金额超过了 $K$,那么他在 Bajtyna 心中的好感度将降为零(该测试点不得分)。请帮助 Bajtek!
交互
你需要实现一个程序,利用提供的库(模拟巫师 Bitocy)来解决 Bajtek 的问题。要在程序中使用该库,必须包含:
- C/C++:
#include "poslib.h" - Pascal:
uses poslib;
该库提供以下三个过程和函数:
inicjuj— 提供楼层数 $n$ 以及费用 $a$ 和 $b$。该函数应在程序开始时恰好调用一次。- C/C++:
void inicjuj(int *n, int *a, int *b); - Pascal:
procedure inicjuj(var n, a, b: longint);
- C/C++:
pytaj— 字符 $c$ 表示问题类型('W' 表示“之上”,'N' 表示“之下”),$x$ 是楼层编号。函数返回巫师回答的逻辑值。你的程序可以任意多次调用此函数。- C/C++:
int pytaj(char c, int x);(0 表示假,1 表示真) - Pascal:
function pytaj(c: char; x: longint): boolean;
- C/C++:
odpowiedz— 使用此过程/函数给出 Bajtyna 所在的楼层编号。该函数应恰好调用一次,调用后程序将结束。- C/C++:
void odpowiedz(int wynik); - Pascal:
procedure odpowiedz(wynik: longint);
- C/C++:
你的程序不能打开任何文件,也不能使用标准输入输出。解决方案将与库一起编译,命令如下:
- C:
gcc -O2 -static poslib.c pos.c -lm - C++:
g++ -O2 -static poslib.c pos.cpp -lm - Pascal:
ppc386 -O2 -XS -Xt pos.pas
在 /home/zawodnik/rozw/lib 目录下,你可以找到示例库文件和说明其使用方法的非最优解。为了使上述编译命令生效,库文件应位于当前目录下。
数据范围
你可以假设 $1 \leqslant n \leqslant 10^9$ 且 $1 \leqslant a, b \leqslant 10\,000$。
样例
样例 1
| 调用函数 | 返回值与说明 |
|---|---|
Pascal: inicjuj(n,a,b); C 或 C++: inicjuj(&n,&a,&b); |
从此刻起 $n = 5, a = 1, b = 2$。 |
pytaj('W',3); |
结果为 0/false。询问 Bajtyna 是否在 3 层之上。得到回答“否”。支付 2 个 bajtalar。 |
pytaj('N',2); |
结果为 0/false。询问是否在 2 层之下。得到回答“否”,支付 2 个 bajtalar。 |
pytaj('W',2); |
结果为 1/true。询问是否在 2 层之上。得到回答“是”,支付 1 个 bajtalar。 |
odpowiedz(3); |
回答 Bajtyna 在 3 层。这是正确答案。总共花费 5 个 bajtalar。 |
上述交互过程是正确的,但不是最优的,因此程序无法在该测试中得分。特别地,一个编写良好的程序对于 $n = 5, a = 1, b = 2$ 的数据,能够通过提问确保在任何情况下花费不超过 4 个 bajtalar。