Skip to content

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了,可以的话,请您参考添加页面,与大家一起分享你的题解!