#P9622. [ICPC 2020 Nanjing R] Ah, It's Yesterday Once More
[ICPC 2020 Nanjing R] Ah, It's Yesterday Once More
Description
2018 年,由南京航空航天大学(NUAA)主办的 (ICPC)区域赛在南京再次举行,这是在经过几年的间隔后再次举办。比赛中有超过 支队伍参加,清华大学的队伍 获得了冠军。
两年过去了,在 2018 年和 2019 年取得巨大成功后,NUAA 继续在 2020 年举办 ICPC 南京区域赛。尽管由于疫情我们这次无法在南京聚集,但我们仍应感谢所有工作人员和志愿者为这次比赛所做的辛勤工作。感谢你们为这次比赛做出的巨大贡献!
在 2018 年的比赛中,问题 K,,要求参赛者为游戏构建一个操作序列。让我们先回顾一下该问题的内容:
这个拼图是一个有 行 列的网格(),其中有一些(至少 只)袋鼠站在拼图中。玩家的目标是控制它们聚集在一起。某些单元格中有墙,袋鼠不能进入有墙的单元格。其他单元格是空的。袋鼠可以从一个空单元格移动到相邻的空单元格,方向有四个:上、下、左、右。保证袋鼠可以通过相邻的空单元格从任何空单元格到达任何其他空单元格。还保证拼图中没有循环——也就是说,不可能有袋鼠从一个空单元格出发,经过几个不同的空单元格,然后回到原来的单元格。
每个空单元格开始时恰好有一只袋鼠,玩家可以通过按键盘上的 U、D、L、R 按钮来控制袋鼠。袋鼠将根据您按下的按钮同时移动。例如,如果您按下按钮 R,袋鼠会向右移动一个单元格,如果存在且为空,否则将保持不动。
在这个问题中,参赛者需要构建一个最多包含 步的操作序列,只能由 U、D、L、R 组成。如果按顺序操作这些步骤后,仍然有两只袋鼠站在不同的单元格中,参赛者将得到一个
Wrong Answer判定。
我们的亲爱朋友 Kotori 也参加了比赛,并提交了一段随机算法的代码。令她惊讶的是,这个简单的解决方案被判定为正确答案。我们现在展示她的解决方案如下:
#include <bits/stdc++.h>
using namespace std;
string s = "UDLR";
int main()
{
srand(time(NULL));
for (int i = 1; i <= 50000; i++) putchar(s[rand() % 4]);
return 0;
}
对于不熟悉 C 和 C++ 的参赛者:上述代码将输出一个长度为 的随机字符串,仅由字符 U、D、L 和 R 组成,其中每个字符在字符串中的每个位置出现的概率相等。
Kotori 怀疑这个问题可能没有那么简单,所以现在,在这次 中,你需要构造一个输入数据来破解她的解决方案。由于随机性,您的输入数据只需满足至少 的成功破解率。
正式地说,我们准备了 个随机生成的字符串,每个字符在每个位置出现的概率相等,并将它们用作控制序列来对抗您的答案。为了使您的答案被接受,在使用您的答案作为单元格地图并执行整个控制序列后,至少有 次袋鼠仍在不同的单元格中。
请注意,您的输入数据必须完全合法。也就是说:
- 您答案中的地图不应大于 ;
- 您的答案应至少包含两个空单元格;
- 您答案中的所有空单元格应从任何空单元格开始是可达的;
- 不允许存在由空单元格组成的循环。
Input Format
本题没有输入。你需要自己解决!
Output Format
您应首先输出一行,包含两个整数 和 (),用空格分隔,表示您答案中的地图的行数和列数。
然后您应输出 行,其中第 行包含一个长度为 的二进制字符串 ()。如果 ij$ 列的单元格是空的;否则,该对应单元格包含墙壁,无法进入。
再次注意,您的答案只需达到至少 的成功破解率。不是很难,对吧?
(No input)
3 4
1111
1010
1100
Hint
注意
我们提供的示例输出(显然)是错误的。它仅用于向您展示输出格式。这是一个 的地图,开始时有 墙,因此在空单元格中将有 只袋鼠。
题面翻译由 ChatGPT-4o 提供。
京公网安备 11011102002149号