#THU20253B. 全息棋盘谜题

    ID: 324 Type: Default 1000ms 512MiB Tried: 217 Accepted: 13 Difficulty: 5 Uploaded By: Tags>清华推研机试校内推免思维其他构造模拟

全息棋盘谜题

题面下载

样例下载

时间限制: 1.0 秒

空间限制: 512 MB

题目背景

曙梦研究院的算法演练室里有一台单行全息棋盘。最近,实习生小梦正在利用它进行一种黑白棋子的位移推演训练,以锻炼自己对复杂状态空间的搜索与规划能力。

题目描述

全息棋盘是一个规模为 (n+m+1)×1(n+m+1)\times 1 的棋盘,设格子从左到右的编号分别为 1,2,,(n+m+1)1,2,\cdots, (n+m+1)

初始情况下,第 1,,n1,\cdots,n 格均为白棋子,第 n+1n+1 格为空,第 n+2,,n+m+1n+2,\cdots,n+m+1 格均为黑棋子。

小梦可以对棋盘进行操作,每次操作都可以将当前空格子左右半径 22 格以内的一个棋子移动到空格子中。形式化地说:若当前第 xx 格为空,则可以将第 x2,x1,x+1,x+2x-2,x-1,x+1,x+2 格中的任意一枚棋子移动至第 xx 格(前提是对应格的编号在 1,,n+m+11,\cdots ,n+m+1 的范围内)。

现在要求最终局面为:第 1,,m1,\cdots,m 格均为黑棋子,第 m+1m+1 格为空,第 m+2,,n+m+1m+2,\cdots,n+m+1 格为白棋子。你需要帮助小梦算出最少的操作次数,并给出具体的操作序列。

输入格式

从标准输入读入数据。

输入第一行为两个正整数,分别为 n,mn,m

输出格式

输出到标准输出。

第一行为一个整数 xx,表示从初始局面到最终局面所需要的最少操作步数。

第二行为 xx 个正整数 c1,,cxc_1,\cdots,c_x,各整数间以一个空格分隔。其中 cic_i 表示第 ii 次操作选择了第 cic_i 格的棋子移动至当前局面下的空格子。如果有多种解法,输出任意一种即可。

输入格式

从标准输入读入数据。

输入第一行为两个正整数,分别为 n,mn,m

输出格式

输出到标准输出。

第一行为一个整数 xx,表示从初始局面到最终局面所需要的最少操作步数。

第二行为 xx 个正整数 c1,,cxc_1,\cdots,c_x,各整数间以一个空格分隔。其中 cic_i 表示第 ii 次操作选择了第 cic_i 格的棋子移动至当前局面下的空格子。如果有多种解法,输出任意一种即可。

2 2
8
2 4 5 3 1 2 4 3

样例 1 解释

具体挪动的步骤如下:

合法的操作方案不止一种,4 2 1 3 5 4 2 3 也是合法操作,输出这两种或者其他合法方案当中的任意一种均为正确。

子任务

对于所有数据,保证 n×m105n\times m\le 10^5

测试点编号 n,mn,m\le 特殊性质
1101\sim 10 55
112011\sim 20 1010
213021\sim 30 100100
313531\sim 35 10510^5 n=1n=1
364036\sim 40 n=mn=m
415041\sim 50

评分方式

对于每个测试点,评分标准如下:

  • 若标准输出的第一行与答案的第一行不一致,该测试点不得分
  • 若标准输出的第一行与答案的第一行相同,则获得该测试点 50%50\% 的分数;
    • 需要注意的是,这种情况下需要程序在规定的时间/空间限制内正常运行结束才能获得对应分数;
    • 此外,由于判题需要,即便你只想回答第一行的问题 xx,也请在第二行按照输出格式输出 xx 个任意整数(数据范围不得超过 int);
  • 在第一行比对正确后,我们会检查第二行给出的操作序列是否可以得到最终状态,若可以达到,则获得该测试点的全部分数。
  • 需要注意的是,不要在输出格式之外输出任何多余内容,否则测试点不得分(但是行末空格是允许的)。