CF2045M.Mirror Maze

普及+/提高

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

镜子迷宫

给定一个有(R)行(从北到南编号为(1)到(R))和(C)列(从西到东编号为(1)到(C))的网格。这个网格中的每个方格大小相同。位于第(r)行和第(c)列的方格表示为((r,c))。每个方格要么为空,要么在方格的一条对角线上有一面镜子。每面镜子由一条线段表示。如果镜子是从西南角到东北角斜着放置的,则为(1)型镜子;如果是另一条对角线方向,则为(2)型镜子。

这些镜子遵循反射定律,即反射角等于入射角。正式地说,对于(1)型镜子,如果一束光线从方格的北、南、西或东方向射入,那么它将分别被反射到方格的西、东、北和南方向。类似地,对于(2)型镜子,如果一束光线从方格的北、南、西或东方向射入,那么它将分别被反射到方格的东、西、南和北方向。

你想要在网格外放置一个激光发射器,使得激光束能击中所有的镜子。有(2\cdot(R + C))个可能放置激光发射器的位置:

  • 从网格北侧的第(c)列((1\leq c\leq C)),向南发射激光束;
  • 从网格南侧的第(c)列((1\leq c\leq C)),向北发射激光束;
  • 从网格东侧的第(r)行((1\leq r\leq R)),向西发射激光束;
  • 从网格西侧的第(r)行((1\leq r\leq R)),向东发射激光束。

确定所有可能放置激光发射器的位置,使得激光束能击中所有的镜子。

输入格式

第一行包含两个整数(R)和(C)((1\leq R,C\leq200))。

接下来的(R)行,每行包含一个长度为(C)的字符串(S_r)。字符串(S_r)的第(c)个字符表示方格((r,c))。每个字符可以是“.”(如果方格为空)、“/”(如果方格有(1)型镜子)或者“\”(如果方格有(2)型镜子)。网格中至少有一面镜子。

输出格式

输出一个整数,表示能使激光束击中所有镜子的激光发射器的可能放置位置的数量,记为(k)。

如果(k>0),则输出(k)个用空格分隔的字符串,表示激光发射器的位置。每个字符串由一个字符和一个紧跟其后的整数组成,中间没有空格。这个字符表示网格的边,如果将激光发射器放在网格的北、南、东或西边,则字符分别为(N)、(S)、(E)或(W)。这个整数表示行/列编号。你可以按任意顺序输出这些字符串。

输入输出样例

  • 输入#1

    4 4
    .//.
    .\\.
    .\/.
    ....

    输出#1

    2
    N3 W2
  • 输入#2

    4 6
    ./..\.
    .\...\
    ./../\
    ......

    输出#2

    2
    E3 S2
  • 输入#3

    4 4
    ....
    ./\.
    .\/.
    ....

    输出#3

    0

说明/提示

样例输入/输出 #1的解释

下面的图示展示了这个样例的一个解决方案。

样例输入/输出 #2的解释

下面的图示展示了这个样例的一个解决方案。

输入解题思路,AI测评打分。不知道怎么写?

首页