AT_ahc042_a.[AHC042A] Oni wa Soto, Fuku wa Uchi

NOI/NOI+/CTSC

通过率:0%

AC君温馨提醒

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

题目描述

有一个由 N×NN \times N 个格子组成的棋盘。最左上角的格子的坐标为 (0,0)(0,0),从该格子向下走 ii 格、向右走 jj 格到达的格子的坐标为 (i,j)(i,j)。格子 (i,0),(i,1),⋯ ,(i,N−1)(i,0),(i,1),\cdots,(i,N-1) 称为第 ii 行,格子 (0,j),(1,j),⋯ ,(N−1,j)(0,j),(1,j),\cdots,(N-1,j) 称为第 jj 列。初始状态下,棋盘上分别有 2N2N 个鬼 和 2N2N 个福 ,它们分别位于 2N2N 个互不相同的格子中。

你每次操作可以选择一行或一列,并将其向左右或上下的某个方向移动一格。

  • 将第 ii 行向左移动:位于 (i,0)(i,0) 的棋子会被移出棋盘,对于每个 j=1,…,N−1j=1,\dots,N-1,位于 (i,j)(i,j) 的棋子会移动到 (i,j−1)(i,j-1)。
  • 将第 ii 行向右移动:位于 (i,N−1)(i,N-1) 的棋子会被移出棋盘,对于每个 j=0,…,N−2j=0,\dots,N-2,位于 (i,j)(i,j) 的棋子会移动到 (i,j+1)(i,j+1)。
  • 将第 jj 列向上移动:位于 (0,j)(0,j) 的棋子会被移出棋盘,对于每个 i=1,…,N−1i=1,\dots,N-1,位于 (i,j)(i,j) 的棋子会移动到 (i−1,j)(i-1,j)。
  • 将第 jj 列向下移动:位于 (N−1,j)(N-1,j) 的棋子会被移出棋盘,对于每个 i=0,…,N−2i=0,\dots,N-2,位于 (i,j)(i,j) 的棋子会移动到 (i+1,j)(i+1,j)。

最多可以进行 4N24N^2 次操作。你的目标是在不移除任何一个福的前提下,用尽可能少的操作次数将棋盘上的所有鬼全部移除。

输入格式

输入通过标准输入给出,格式如下:

NN
C0C_0
⋮\vdots
CN−1C_{N-1}

  • 棋盘的大小 NN 在所有测试用例中均固定为 N=20N=20。
  • 对于每个 i=0,1,⋯ ,N−1i=0,1,\cdots,N-1,CiC_i 表示第 ii 行的初始状态,是一个长度为 NN 的字符串,其第 jj 个字符含义如下:
    • x:有鬼
    • o:有福
    • .:既没有鬼也没有福
  • 鬼和福的数量均为 2N2N。
  • 对于初始状态下有鬼的每个格子,保证满足以下条件之一。由此保证存在不移除任何福、且在 4N24N^2 步内移除所有鬼的操作方案。
    • 同一列上方所有格子都没有福。
    • 同一列下方所有格子都没有福。
    • 同一行左侧所有格子都没有福。
    • 同一行右侧所有格子都没有福。

输出格式

将第 tt 步操作表示为方向字符 dtd_t 和行/列编号 ptp_t 的组 (dt,pt)(d_t, p_t):

  • 将第 ii 行向左移动:(L, ii)
  • 将第 ii 行向右移动:(R, ii)
  • 将第 jj 列向上移动:(U, jj)
  • 将第 jj 列向下移动:(D, jj)

按如下格式输出到标准输出:

d0d_0 p0p_0
⋮\vdots
dT−1d_{T-1} pT−1p_{T-1}

输出的操作次数 TT 必须不超过 4N24N^2。超出上限将被判定为 WA。

说明/提示

提示

对于有鬼的格子 (i,j)(i,j),如果其上方没有福,则连续对第 jj 列执行 i+1i+1 次上移操作或 i+1i+1 次下移操作,可以在不移除任何福的情况下移除该鬼。对于下、左、右方向同理。由于这些操作不会改变棋盘上剩余棋子的相对位置,因此对所有鬼都应用上述操作即可在不移除任何福的情况下移除所有鬼。

故事背景

今天是 2 月 2 日,在日本会举行名为节分的传统活动。节分是为了在季节更替时驱除邪气、迎接福气的仪式,人们会一边喊着“鬼出去!”一边撒豆驱鬼,同时喊着“福进来!”迎接福气。

高桥君正在玩一款以节分为主题的“鬼出去福进来棋盘游戏”。在这个游戏中,同样需要驱逐鬼、迎接福。

请你设计一个尽可能高分的操作方案。

得分

设输出的操作序列长度为 TT,最终棋盘上剩余的鬼数为 XX,被移除的福数为 YY,则得分如下:

  • 若 X=Y=0X=Y=0,得分为 8N2−T8N^2-T。
  • 若 X>0X>0 或 Y>0Y>0,得分为 4N2−N(X+Y)4N^2-N(X+Y)。

共有 150 个测试用例,所有测试用例得分之和为提交的总得分。若有任意一个测试用例输出不合法或超时,则整份提交被判为 WA 或 TLE。比赛期间以最高得分计入最终排名,赛后不进行系统测试。若多名参赛者得分相同,则排名并列。

输入生成方法

首先,从 N2N^2 个格子中随机选出 2N2N 个不同的格子,放置 2N2N 个福。

然后,枚举满足以下条件之一的格子,记为 SS:

  • 同一列上方所有格子都没有福。
  • 同一列下方所有格子都没有福。
  • 同一行左侧所有格子都没有福。
  • 同一行右侧所有格子都没有福。

若 SS 的元素个数小于 2N2N,则重新生成福的位置。

最后,从 SS 中随机选出 2N2N 个格子,放置鬼。

工具(输入生成器与可视化工具)

比赛期间禁止分享可视化结果、讨论解法或思路。请注意遵守规则。

由 ChatGPT 4.1 翻译

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

首页