这是一道通信题。
JOI 王国是一个被海环绕的岛国,它的土地是一个
JOI 王国的女王 Anna 邀请了 Bruno 参加聚会。她选择了
Bruno 并不知道他的具体位置,但是他知道东南西北的方向。同时,他可以看到周围和所在位置共
Bruno 可以采取以下五种行动之一:
- 移动到
。 - 移动到
。 - 移动到
。 - 移动到
。 - 认为当前位置就是聚会举办地点,停止移动。
由于时间紧急,Bruno 走的路径必须是某条最短路。因此,Bruno 一定不会经过网格边缘。
由于写大整数很麻烦,Anna 想要最小化写下整数的最大值。请你写一个程序来给出 Anna 的标号方案和 Bruno 的行动策略。
任务
本题仅支持符合 C++ 11 标准及以上的 C++ 语言。
你需要提交两份源文件。
Alice
第一个源文件名为 Alice.cpp
,该程序将扮演 Anna 的角色。你必须引用 Alice.h
。
你需要实现下面的过程:
void Anna(int N, int K, std::vector<int> R, std::vector<int> C);
你可以调用如下函数:
void setFlag(int r, int c, int value);
这个函数的作用设置方格旗帜的整数。
Wrong Answer[1]
。
Wrong Answer[2]
。
对于一次 Anna
的调用,一组 Wrong Answer[3]
。
对于一次 Anna
的调用,setFlag
将被恰好调用 Wrong Answer[4]
。
如果在 Anna
的调用中程序被判为了 Wrong Answer
,程序将立刻结束。
Bruno
你需要实现如下过程:
std::vector<int> Bruno(int K, std::vector<int> value);
这个函数应当返回 Bruno 的下一步行动。对于每次 Anna
的调用,这个函数会被调用恰好一次。
参数
函数的返回值应当为一个长度为 Wrong Answer[5]
。
返回的元素均为 Wrong Answer[6]
。
数组的第 Wrong Answer[7]
。
每个测试点包含了 Anna
和 Bruno
各一次。
特别的,样例交互库对于每组测试数据将先后调用 Anna
和 Bruno
各一次,因此 Anna
和 Bruno
将被交替调用恰好
评测方式
样例评测库的编译方式为:
g++ grader.cpp Anna.cpp Bruno.cpp -o grader -std=c++17 -fsigned-char -O2
样例输入
第一行一个整数
对于每组数据:
第一行两个整数
接下来
样例输出
若交互过程不合法,将输出 Wrong Answer
并接上错误编号。
否则输出形如 Accepted: Maximum value = 12
的信息表示使用的最大整数。
样例一
input
1 5 7 1 1 1 2 2 1 2 2 2 3 3 2 3 3 1 1
explanation
Anna 的调用 |
Bruno 的调用 |
返回值 |
---|---|---|
Anna(5,7,[1,1,2,...,3],[1,2,1,...,3]) |
||
SetFlag(0,0,47) |
||
SetFlag(0,1,15) |
||
SetFlag(0,2,63) |
||
SetFlag(4,4,89) |
||
Bruno(7,[47,15,63,...,71]) |
Anna 的设置的旗帜值为:
47 15 63 56 71 10 46 52 18 67 63 56 71 19 48 52 18 67 99 26 71 19 48 60 89
数据范围与提示
本题只有一个子任务。
保证
设
若
若
若
若
若
保证对于合法的调用,评测库不会使用超过
hack
hack 数据格式与样例输入相同。
hack 成功后,请联系管理员添加数据至 hack 数据。
时间限制:两个程序的时间限制分别为
空间限制:两个程序的空间限制分别为