1316: 2048!
题目
题目描述
相信大家都玩过《2048》,对这个游戏的规则都不陌生。作为一个优秀的Computer Science学生,除了能够快速拼出2048,通关游戏之外,一定也认为制作出同款游戏易如反掌。于是,这款低配魔改版《2048》就将要出炉了。
首先简单介绍一下这个游戏的规则,以方便模拟。(基本界面如下图所示)

-
在开始游戏前,网格上会随机产生两个数字散落在其中。
-
每次操作,用户给出上下左右四个方向作为指令。接着,网格上的数字会朝着用户给出的方向移动,直到把所有空位占满。
-
移动结束之后,某些数字可能因此靠在了一起。如果相邻的两个数字相同,就朝着移动方向合并,后面的数字依次移动。
-
(注意)朝着移动方向,靠前的格子优先合并。
例如:
在朝右合并之后,结果是
-
合并完之后,在网格的空白位置会随机出现一个数字,让游戏继续进行。
-
(注意)如果本次操作没有移动并且也没有合并,那么本次操作会被视为无效,网格中不会出现新的数字!
-
用户不断操作,直到网格中出现2048或者网格被数字占满的时候停止游戏。
整个游戏中,会有个分数权衡操作的质量。每次合并操作时,合并之后数字的值会被加作分数。
给出初始的局面,给出每次用户的操作方向和可能会出现的新的数字的位置和数值,请模拟整个游戏。
由于原始游戏$4\times4$的网格太小,本游戏的棋盘大小为$8\times8$。
输入格式
前两行,每行输入$x$,$y$,$c$,表示网格$(x, y)$位置上有数字$c$
第三行输入$n$,表示用户的操作数
接下来n行,每行输入$dir_i$,$x_i$,$y_i$,$c_i$
其中$dir$为$W$,$A$,$S$,$D$中的一种,表示移动方向分别为上,左,下,右
$x$,$y$,$c$,表示操作完之后网格$(x, y)$位置上出现新数字$c$
注意
- 网格位置的表示是$0-base$的
- 输入不保证每次操作都有效,如果无效,请忽略$x_i$,$y_i$,$c_i$
- 输入保证最后一步完成之后,网格中合成2048,结束游戏
输出格式
先输出$8\times8$的网格结束状态,其中每个数字的场宽设置为5
接下来输出$Score:\ $和$ans$。(注意冒号后面的空格)
样例输入
text
3 7 4
0 6 2
10
D 5 7 4
D 7 5 2
W 3 0 4
D 7 4 4
W 6 3 4
W 1 2 2
A 6 7 2
S 2 0 2
A 7 3 2
S 3 0 4
样例输出
text
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0
8 0 0 0 0 0 0 0
8 8 2 2 0 0 0 0
Score: 28
数据范围
样例空间有限,数据保证最后一步合成2048结束
满足,$n\leq2000$,$0\le x,y<8$,$c \in \{ 2, 4 \}$
Oops! 本题目还没有解答!
助教老师们编题的速度,已经超过了解题的速度!
OJ翻了一新,但本解答集还大多用的是2017-2019级,甚至更早的同学们贡献的答案。
如果你已经AC了,可以的话,请您参考添加页面,与大家一起分享你的题解!