JOI 商店售卖
Anna 来到了 JOI 商店购物,他希望买编号在
Anna 将与店员 Bruno 交流后决定买哪件商品,Bruno 知道每件商品的价格,但是他不知道 Anna 想要的编号区间
Anna 和 Bruno 将使用电子设备发送字符通信,每个字符都是
Anna 将得到
任务
本题仅支持符合 C++11 及以上标准的语言。
你需要提交两份源文件,分别名为 Anna.cpp
和 Bruno.cpp
。
Anna
你必须引用 Anna.h
。
你需要是实现如下过程:
void InitA(int N, int L, int R);
对于每个测试点,这个函数只会在开始时被调用一次。
void ReceiveA(bool x);
每当 Bruno 向 Anna 发送字符时都会调用此函数。
true
表示 Bruno 发送了
int Answer();
当所有字符发送结束后,这个函数会被调用恰好一次。
这个函数应当返回 Anna 想要购买的物品编号。
返回值必须在 Wrong Answer [1]
。
返回的编号必须是 Wrong Answer [2]
。
在 InitA
和 ReceiveA
的过程中,你可以调用如下函数:
void SendA(bool y);
这个函数可以给 Bruno 发送一个字符。
这个函数最多被调用 Wrong Answer [3]
。
Bruno
你必须引用 Bruno.h
。
你需要实现如下过程:
void InitB(int N, std::vector<int> P);
对于每个测试点,这个函数会在开始时被调用一次。
void ReceiveB(bool y);
每当 Anna 向 Bruno 发送字符时都会调用此函数。
你可以调用以下函数:
void SendB(int x);
Bruno 可以通过这个函数向 Anna 发送字符。
这个函数最多被调用 Wrong Answer [4]
。
样例评测库
程序将以如下方式执行:
对于每个测试点,评测库创建两个队列
- 调用
InitA
和InitB
,并将通过SendB
和SendA
发送的字符对应加入队列 和 。 - 如果
和 均空,调用Answer
,结束评测。 - 弹出
或 中的一个字符,对应调用ReceiveA
或ReceiveB
,并将SendA
或SendB
发送的字符对应加入另一队列。 - 回到步骤 2。
样例评测库
输入格式
第一行三个整数
第二行
输出格式
若你的程序被判为 Wrong Answer
,则交互库输出形如 Wrong Answer [1]
的信息。
否则交互库输出形如 Accepted: Y X
,其中
样例
input
4 0 2 3 1 4 2
explanation
以下是一次合法的通信过程:
评测库调用 | Anna 或 Bruno 调用 | 返回值 |
---|---|---|
InitA(4, 0, 2) |
||
SendA(true) |
||
SendA(false) |
||
InitB(4, {3, 1, 4, 2}) |
||
ReceiveB(true) |
||
SendB(true) |
||
ReceiveA(true) |
||
ReceiveB(false) |
||
Answer() |
数据范围与评分标准
对于所有数据,保证
你在这个子任务的得分是所有测试点得分的最小值。
对于某个测试点,设
若
若
若
若
保证合法的交互过程中,两份评测库总用时不会超过
时间限制:两份程序及评测库共
空间限制:两份程序及对应评测库分别