#P7225. [RC-04] 走迷宫

[RC-04] 走迷宫

题目背景

这是一道交互题。

请确保您提交前认真阅读过 https://www.luogu.com.cn/blog/luogu/interactive-problems,并且熟知 P1947 的写法。

您可以直接在以下样例程序中编辑:

#include<bits/stdc++.h>
using namespace std;
extern "C" bool move_to(char position);
extern "C" string find_out_map(int X,int Y,int N){
	return "233";
}

同时本题不支持 Pascal,祝愿 Pascal 党早日转 C++。

题目描述

题目描述

这是一道交互题。

你被困在一个迷宫内,你需要求出这个迷宫的地图。

迷宫是 n×nn\times n 的网格,每个位置上要么是障碍,要么是路。障碍用 1 表示,路用 0 表示。坐标按照从上到下,从左到右编号,第 ii 行第 jj 列坐标为 (i,j)(i,j)

定义两个格子连通当且仅当他们有公共边(四连通)。保证恰好存在一个 0 构成的连通块,并且你的出生点在这个连通块中。

实现细节

你需实现一个函数:

string find_out_map(int x,int y,int n)

参数为三个整数 x,y,nx,y,n,返回值为一个字符串。其中 x,yx,y 表示你的坐标为 (x,y)(x,y)1<x,y<n1<x,y<n),nn 为地图大小。

你返回的字符串的第 ii 位(0i<n×n0\le i<n\times n)为 1 表示地图的第 in+1\lfloor\dfrac{i}{n}\rfloor+1 行,第 i+1nini+1-n\lfloor \dfrac{i}{n}\rfloor 列是障碍;反之为路。

你可以调用以下函数以找出答案:

bool move_to(char position)

其中 positionWASD 中任一个,分别表示试图向上,左,下,右(分别为横坐标减一,纵坐标减一,横坐标加一,纵坐标加一)移动。若这个函数返回 1,说明你成功向这个方向移动一格;否则说明这个方向上有障碍物,移动失败。注意除了最开始,你都不能从交互器获得当前坐标。假如 position 不合法,交互器的行为是未定义的。

保证地图开始时已确定,不会动态构造。保证第一列,第一行,第 nn 列,第 nn 行都是障碍。

你的函数可能会被调用多次,请注意初始化。

输入格式

这部分你无法读取,其中包含 nn 与地图。输入文件以加密形式给出,并且交互器中也不会解密存储。

输出格式

没有输出。

提示

交互过程范例

假设地图为

1111
1011
1001
1111

最初传进来的参数为 (2,2,4)(2,2,4)

下面是一种合法的交互过程:

选手调用 交互器返回
move_to('S') 1
move_to('D')
move_to('W') 0
返回 1111101110011111 Accepted

数据范围与限制

本题时间限制 22 秒,空间限制 512MB512\text{MB},且保证交互库最坏情况下所用时间小于 0.50.5 秒、空间小于 15MB15\text{MB}

首先交互题会受到和常规题相同的限制,如超时/超空间会导致整个测试点得零分。

在此基础上,当且仅当你报告的迷宫地图完全正确时你得分。设你调用函数最多的一次次数为 WW,则你得到该测试点的满分,当且仅当 W5×105W\le 5\times 10^5

对于 100%100\% 的数据,5n5005\le n\le 500。设调用你的函数的次数为 xx(相当于有多组数据,你需要初始化),则 1x501\le x\le 50。详细数据范围如下,(T)(T) 表示这个测试点分数为 TT 分。

  • 测试点 1 (8)1\ (8)n=5,x50n=5,x\le 50
  • 测试点 2 (8)2\ (8)n=7,x50n=7,x\le 50
  • 测试点 3 (20)3\ (20)n10,x50n\le 10,x\le 50
  • 测试点 4 (10)4\ (10)n500,x7n\le 500,x\le 7。保证仅存在恰好一个 1 构成的连通块。
  • 测试点 5 (10)5\ (10)n20,x20n\le 20,x\le 20
  • 测试点 6 (10)6\ (10)n50,x20n\le 50,x\le 20
  • 测试点 7 (9)7\ (9)n100,x10n\le 100,x\le 10
  • 测试点 8 (10)8\ (10)n200,x7n\le 200,x\le 7
  • 测试点 9 (15)9\ (15)n500,x7n\le 500,x\le 7

交互题怎么调试

本题交互过程太过简单,因此本题不提供交互器。请选手自行编写。

假如你不知道怎么做:只需编写一个程序,读入地图,并且实现 move_to 函数,然后把你的答案函数放于其中即可运行。