UOJ Logo dram的博客

博客

直播玩智力游戏 (进度:Case 13)(已坑)

2016-07-18 16:15:39 By dram

本题是 UNR Day1 提答。orz 居然是一道 20 个点的手玩提答。

然而渣渣 dram 正在漫长地手玩。

这根本就不是算法题好吗?

听说这题暴搜可以满分 orz immortalCO

最新进展

我们机房刚刚开黑把原版游戏 20 关全过了

大致表述方法

注意:此处会经常改

  • 1-9 果冻和俄罗斯方块。
  • #
  • <>^v 箭头
  • ==> “然后就是”
  • [%d] 步骤序号

Case 1: 5

#           1   #
|               |
#         #-#   #
|               |
#     3     1 2 #
|               |
#-# 2 # 3   #-#-#
| |   |     | | |
#-#-#-#-#-#-#-#-#

首先第 3 行那个 3 好讨厌,果断和右面的 3 合并,然后发现需要把第 3 行 2 推到右面和底下的合并,于是当推到那个平台下面的时候合并竖着的 1

v<<<1
v
v #-#   ==>   < 1
v             < |
1 2           < 1 2

然后推着这个小车向左到头

5 2 1
4 3 1
8 3 0
7 3 0
7 5 0
6 5 0
6 3 0
5 3 0
4 3 0

(插播奇葩:发现控制好终端窗口大小然后 less report.out 有奇效!)

Case 2: 5

#     2       2 #
|               |
# 1   1       1 #
|               |
#-#   #   #   #-#
| |   |   |   | |
#-#-#-#-#-#-#-#-#

这里我们要用到一个重要的方法:这个小车是不会从宽度为 1 的洞里掉下去的

1-1 >>>   >>>   >>>
#   #   #   #   #

所以我们先把 (4,4) 左移到那个洞里填上,然后成功形成小车一枚。

            2                         2
  1-1  >>>  1                     1-1-1
# 2 #   #   #      ==>    # 2 #   #   #

然后把 2 送回去和洞里的 2 相会

Case 3: 5

#       3 2   # 2     #
|             |       |
#-#-#   #-# 1 #-#     #
|                     |
#           3         #
|                     |
#-#-#   #-# 1 #-#-#-#-#
| | |   | |   | | | | |
#-#-#-#-#-#-#-#-#-#-#-#

注意到这里有个门 orz

想想玩游戏的时候怎么弄的,哦,得让一个人卡着这个门

先让 3 掉到洞里,然后 2 从左边过来卡着门

正好左边有两个格子的空隙,正好放一个 2-2

       v 门在这个位置

        2 3
==>     2       3
==>     2     2 3      // 第 5 行的那个 2
==>  << 2-2 3

然后与左边洞里的 3 相会

Case 4: 5

#           1       #
|                   |
#           2       #
|                   |
#           #       #
|                   |
# 2   1             #
| |   |             |
# 2   1           2 #
|                   |
#-#   #           #-#
| |   |           | |
#-#-#-#   #-#-#-#-#-#
| | | |   | | | | | |
#-#-#-#-#-#-#-#-#-#-#

性质:这个小车可以带着 2 往前走不掉

2
1-1

于是我们用平台上的那个 2 和右面的 2 得到一个 2-2 小车。

#                   #
|                   |
#           1       #
|                   |
#           #       #
|                   |
# 2   1             #
| |   |             |
# 2   1             #
|                   |
#-#   #       2-2 #-#
| |   |           | |
#-#-#-#   #-#-#-#-#-#
| | | |   | | | | | |
#-#-#-#-#-#-#-#-#-#-#

然后呢?似乎左边有一个坑,那就用平台上的 1 填上。

等等左边有个 $\begin{matrix}1\\|\\1\end{matrix}$,把它扔到最右面卡在那里好了

(我已经不耐烦到开始滥用数学公式了)

#                   #
|                   |
#           1       #
|                   |
#           #       #
|                   |
# 2               1 #
| |               | |
# 2               1 #
|                   |
#-#   #       2-2 #-#
| |   |           | |
#-#-#-#   #-#-#-#-#-#
| | | |   | | | | | |
#-#-#-#-#-#-#-#-#-#-#

然后运送 1 到那个一行高的洞里,把 $\begin{matrix}2\\|\\2\end{matrix}$ 卡到那个两行高的洞里。注意不能和 2-2 粘上否则就没法营救 $\begin{matrix}1\\|\\1\end{matrix}$ 了。

#                   #
|                   |
#                   #
|                   |
#           #       #
|                   |
#                 1 #
|                 | |
#                 1 #
|                   |
#-# 1 # 2   2-2   #-#
| |   | |         | |
#-#-#-# 2 #-#-#-#-#-#
| | | |   | | | | | |
#-#-#-#-#-#-#-#-#-#-#

然后把 $\begin{matrix}1\\|\\1\end{matrix}$ 营救回去就好了。

Case 5: 5

# 1 2   2-2 >>> >>> v #
|                   v |
#-#-#   #-#   #-#   v #
|                   v |
# 1 2               v #
|                     |
#-#-#-#     #       #-#
| | | |     |       | |
#-#-#-#-#   #     #-#-#
| | | | |   |     | | |
#-#-#-#-#-#-#-#-#-#-#-#

上面 2-2 似乎只能从右面下去,还得有人接驾

看到了两个非常大的洞,显然是得有人踩坑了

那就造一个 2-2 填进横的那个洞里,然后 $\begin{matrix}1\\|\\1\end{matrix}$ 进到 2x2 的那个洞里

#       2-2           #
|                     |
#-#-#   #-#   #-#     #
|                     |
#                     #
|                     |
#-#-#-# 2-2 # 1     #-#
| | | |     | |     | |
#-#-#-#-#   # 1   #-#-#
| | | | |   |     | | |
#-#-#-#-#-#-#-#-#-#-#-#

所以好像还得把上面 2-2 接过来,而 $\begin{matrix}1\\|\\1\end{matrix}$ 向右走一步就形成了两个宽度为 1 的坑。这很好。

#         2-2   >>> v #
|                   v |
#-#-#   #-#   #-#   v #
|                     |
#         <<< <<< <<< #
|                     |
#-#-#-# 2-2 #   1   #-#
| | | |     |   |   | |
#-#-#-#-#   #   1 #-#-#
| | | | |   |     | | |
#-#-#-#-#-#-#-#-#-#-#-#

Case 6: 5

#-#-#-#   3         #
|                   |
#         #-#       #
|                   |
# 1   2             #
|                   |
# #   #   #   3     #
|                   |
#             #   2 #
|             |     |
#         1   #-#-#-#
|             | | | |
#     #-#-#-#-#-#-#-#
|     | | | | | | | |
#-#-#-#-#-#-#-#-#-#-#

如果这样不就可以把第 6 行的那个可怜的 2 送到右面了么?

2
# 3 #
  1     #
  1     #
#-#-#-#-#

方法如下:首先先让 2 过去两格,然后把 $\begin{matrix}1\\|\\1\end{matrix}$ 挪到右边去,然后 2 顺着台阶下来

  [1]
2 >>> v       #
      v [3]   |
# 3 # v       #
      >>>>v   |
  1     # v 2 #
  |     |     |
  1 >>> #-#-#-#
    [2] | | | |
#-#-#-#-#-#-#-#

而形成 $\begin{matrix}1\\|\\1\end{matrix}$ 的方法无非是让左边那个 1 掉下来

# 1>v
# # v #
#                   1 >>>
#   1        ==>    1 >>>
#   ? #             ? #
#-#-#-#             #-#

? 显然取 3,因为没有别的果冻了

而正好卡在 2 右面的洞里的那个 3 显然来自第 8 行

我们让长的平台上的那个 1 接一下第 5 行的 3。

       [2]
#   # v<3     #
      v       |
    <<< #   2 #
        |     |
    1>> #-#-#-#
      [1]

最后剩下两个 3 让它们在一起就好了

Case 7: 5

#                   1 #
|                     |
#         2       2 #-#
|                     |
#         #     1-1   #
|                     |
#                 #   #
|                 |   |
#-1     2-#   #   #   #
| |     | |   |   |   |
# #     #-#   #   #   #
| |     | |   |   |   |
#-#-#-#-#-#-#-#-#-#-#-#

出现了喜闻乐见的粘在墙上的方块

大家既然都看到这里了想必已经比较熟悉各种简单构造了

为了通过中间那个巨大的宽度为 2 的坑,我们需要一个 1-1-1

#                   1 #
|           [3]       |
#         2>v       #-#
|           v  [1]    |
#         # v <<< 2   #
|                     |
#         <<< 1-1 #   #
           [2]
==>

#                   1 #
#                   #-#
#         # 2-2       #
#           1-1   #   #

==>

#                   1 #
#                   #-#
#         #     2-2   #
#         1-1     #   #

==>

#                     #
#                   #-#
#         #     2-2   #
#         1-1-1   #   #

然后推过去就好了

Case 8: 5

#       1     2       #
|                     |
#       #     #       #
|       |     |       |
#       2     1       #
|                     |
# 1                 2 #
|                     |
#-# 1             2 #-#
| |                 | |
#-#-#             #-#-#
| | |             | | |
#-#-#-#-#-#-#-#-#-#-#-#

难炸了!

首先给你们看看最终局面

#                     #
|                     |
#       #     #       #
|       |     |       |
#       2     1       #
|       |     |       |
#       2     1       #
|       |     |       |
#-#     2-2   1     #-#
| |           |     | |
#-#-#         1   #-#-#
| | |             | | |
#-#-#-#-#-#-#-#-#-#-#-#

这个 2 什么鬼啊

玩一玩就会发现一边构造出来了,另一边就傻眼了。关键在这一串 1

用一个 1 从左面接过来一个 2-2,当作转运平台,这个比较简单

然后从左面开始

#       1     2       #
|                     |
#       #     #       #
|       |     |       |
#       2     1       #
|                     |
# 1       >>>         #
|         >>>         |
#-# 2-2   >>>       #-#
| |       >>>       | |
#-#-#   1 >>>     #-#-#
| | |             | | |
#-#-#-#-#-#-#-#-#-#-#-#

这里比较关键,是成功把 1 和 2 反过来的要点之处

这里就是需要构造一个 $\begin{matrix}2&&1\\|&&\\2&-&2\end{matrix}$,然后把 L 型推过去,就能高高兴兴地造一个 $\begin{matrix}1\\|\\1\\|\\1\end{matrix}$

#       1   v<2       #
|           v         |
#       #   v #       #
|       |   v |       |
#       2 v<< 1       #
|         v           |
#         v 1         #
|                     |
#-#       2-2       #-#
| |                 | |
#-#-#     1       #-#-#
| | |             | | |
#-#-#-#-#-#-#-#-#-#-#-#

==>

#       1             #
|                     |
#       #     #       #
|       |     |       |
#       2     1       #
|                     |
#       < 2 1         #
|       < |           |
#-#     < 2-2       #-#
| |                 | |
#-#-#     1       #-#-#
| | |             | | |
#-#-#-#-#-#-#-#-#-#-#-#

==>

#       1             #
|                     |
#       #     #       #
|       |     |       |
#       2     1       #
|       |             |
#       2 1           #
|       |             |
#-#     2-2         #-#
| |                 | |
#-#-#     1       #-#-#
| | |             | | |
#-#-#-#-#-#-#-#-#-#-#-#

然后把三个 1 连在一起就行了

Case 9: 5

#                   2 #
|                     |
#         #         1 #
|                     |
# 2               9-9 #
|                     |
#-#     1 #     #   #-#
| |     | |     |   | |
#-#-#-#-#-#-#-#-#-#-#-#

思路就是把 9-9 推到最左边的坑里面把最左边的 2 营救出来,然后在中间的坑里弄出一个 2-2

#             v<<<< 2 #
|             v       |
#         #   v     1 #
|             v       |
# 2 >>>>>>>>v v   9-9 #
|           v v       |
#-#(9-9)1 # v v #   #-#
| |     | |     |   | |
#-#-#-#-#-#-#-#-#-#-#-#

前面把 2 推下来的时候记得常数优化。我现在发现的是,两个在推动方向连续的块,推前面的不如推后面的,有特殊要求除外

#                     #
|                     |
#         #       1   #
|                     |
# 2             9-9   #
|                     |
#-#     1 #   2 #   #-#
| |     | |     |   | |
#-#-#-#-#-#-#-#-#-#-#-#

然后就好办了,把 1 先卡后面,9-9 过去

#                     #
|                     |
#         #           #
|                     |
# 2           1       #
|                     |
#-# 9-9 1 #   2 #   #-#
| |     | |     |   | |
#-#-#-#-#-#-#-#-#-#-#-#

2 过来,1 过去,完事

Case 10: 5

#   2 1             #
|                   |
#   9-9   9         #
|                   |
#     #   #   #-#-#-#
|                   |
#                   #
|                   |
#-#     #           #
|                   |
#             #   1-#
|                 | |
#     #         2-#-#
|               | | |
#               #-#-#
|               | | |
#-#-#-#-#-#-#-#-#-#-#

我们需要转运 1 过去,我们考虑造一个形如 $\begin{matrix} 1&&\\ &&\\ 9&-&9\\ &&\\ 2&&\\ &&\\ 9&&\\ \end{matrix}$,卡在中间那个空那里

这个嘛,左上角有点尴尬的说

我无意中发现这个 9-9 可以这么玩

#   2 1             #
|                   |
#  <9-9   9         #
|                   |
#     #   #   #-#-#-#
|                   |
#                   #
|                   |
#-#     #           #


==> 

#                   #
|                   |
#     1   9         #
|                   |
#   2 #   #   #-#-#-#
|                   |
# 9-9               #
|                   |
#-#     #           #

这个世界没有摩擦力。

在下一行,为了防止掉落我们先把 9 垫在下面

#   2 #  
|           
# 9-9>      
|             
#-#     #          
|                   
#     9 <<<<<<<<< 这个是垫的那个 9

==>

#     #
|
#   2               
|                   
#-# 9-9 #           
|                   
#     9

然后把那些东西全都移下来变成这样

#-#     #           #
|                   |
#   9-9       #   1-#
|                 | |
#     #   2     2-#-#
|               | | |
#         9     #-#-#
|               | | |
#-#-#-#-#-#-#-#-#-#-#

把上面的 1 弄下来就目标达成了!

最后有个这个

#     #   2     2-#-#
|               | | |
#         9     #-#-#
|               | | |
#-#-#-#-#-#-#-#-#-#-#

但是不要忘了我们还有一个 9-9

#     #   2     2-#-#
|               | | |
# 9-9>>>> 9     #-#-#
|               | | |
#-#-#-#-#-#-#-#-#-#-#

Case 11: 5

#     1-9-9-1   1 #
|                 |
#           #   #-#
|                 |
#               1 #
|                 |
# 9-9           #-#
|                 |
#-#               #
|                 |
#       1         #
|                 |
#   #   #       1-#
|   |   |       | |
#   #-#-#-#   #-#-#
|   | | | |   | | |
#-#-#-#-#-#-#-#-#-#

1-9-9-1 是个什么鬼啊,不过既然还有四个 1,那就只好构造一个

\begin{matrix} 1&-&9&-&9&-&1\\ |&&&&&&|\\ 1&-&1&-&1&-&1\\ \end{matrix}

而且应该放在右下角

问题是那个 1-1-1-1 有点难办啊

右上角有两个 1,考虑 $\begin{matrix} 1&-&1\\ &&\\ 9&-&9\\ \end{matrix}$,然后把 9-9 移开放在右下方宽度为 3 的坑的右侧

先放到这个位置

#               1 #
|                 |
#           #   #-#
|                 |
#               1 #
|                 |
#         9-9   #-#
|                 |
#-#   1-9-9-1     #
|                 |
#       1         #
|                 |
#   #   #       1-#
|   |   |       | |
#   #-#-#-#   #-#-#
|   | | | |   | | |
#-#-#-#-#-#-#-#-#-#

然后把那个构造出来

#                 #
|                 |
#           #   #-#
|                 |
#           1-1   #
|                 |
#           9-9 #-#
|                 |
#-#   1-9-9-1     #
|                 |
#       1         #
|                 |
#   #   #       1-#
|   |   |       | |
#   #-#-#-#   #-#-#
|   | | | |   | | |
#-#-#-#-#-#-#-#-#-#

放掉

#                 #
|                 |
#           #   #-#
|                 |
#                 #
|                 |
#       9-9     #-#
|                 |
#-# 1-9-9-1       #
|                 |
#       1         #
|                 |
#   #   #   1-1-1-#
|   |   |       | |
#   #-#-#-#   #-#-#
|   | | | |   | | |
#-#-#-#-#-#-#-#-#-#

然后把 1-9-9-1 一直往右推就行了,它会把那个 1 带上变成 $\begin{matrix} 1&-&9&-&9&-&1\\ |&&&&&&\\ 1&&&&&& \end{matrix}$

Case 12: 5

#-#-#   1-1   #-#-#
| | |         | | |
#-#-#     #   #-#-#
| |             | |
#-# 1   1-1   1 #-#
| |             | |
#-#-#     #   #-#-#
|               | |
# 2             2-#
|               | |
#-#             #-#
|                 |
#                 #
|                 |
#                 #
|                 |
#       #-#       #
|       | |       |
#-#-#-#-#-#-#-#-#-#

如果你一开始就想把所有 1 集结起来你就输了

最后是要一个

\begin{matrix} 1&-&1&&\\ &&|&&\\ &&1&&\\ &&|&&\\ &&1&-&1 \end{matrix}

(注意到少一个 1)

然后最后粘上一个 1

\begin{matrix} 1&-&1&&\\ &&|&&\\ &&1&&\\ &&|&&\\ &&1&-&1\\ &&&&|\\ &&&&1 \end{matrix}

戳在右下角地上防止掉落。

#-#-#         #-#-#
| | |         | | |
#-#-#     #   #-#-#
| |             | |
#-#           1 #-#
| |             | |
#-#-#     #   #-#-#
|               | |
# 2             2-#
|               | |
#-#   1-1       #-#
|       |         |
#       1         #
|       |         |
#       1-1       #
|                 |
#       #-#       #
|       | |       |
#-#-#-#-#-#-#-#-#-#

然后运过来

#-#-#         #-#-#
| | |         | | |
#-#-#     #   #-#-#
| |             | |
#-#         v<1 #-#
| |         v   | |
#-#-#     # v #-#-#
|           v   | |
#     2     v   2-#
|           v   | |
#-#   1-1   v   #-#
|       |   v     |
#       1   v     #
|       |   v     |
#       1-1 v     #
|           v     |
#       #-# v     #
|       | | v     |
#-#-#-#-#-#-#-#-#-#

往右推就行了

Case 13: 5

#   2 1   #
|         |
#   1 3   #
|         |
#   2 1   #
|         |
#   3 2   #
|         |
#-#-#-#-#-#

果冻这么少,直接人脑暴搜。

或许可以观察一下,发现两个斜向的相同果冻

#   2 1   #
|         |
#   1 3   #
|    \    |
#   2 1   #
|    \    |
#   3 2   #
|         |
#-#-#-#-#-#

所以考虑拿走左下 3

记得常数优化,人脑暴搜

Case 16: 1

交空文件得 1 分

未完待续

所有答案汇总

我真的懒得贴了你们直接看这里吧

评论

absi2011
这一题需要写个游戏界面自己玩233333
absi2011
第四个点这么麻烦啊..有时候我在想..这真的有5分么..这真的有3分么..
immortalCO
%%%%%%%%%%%%%%%%% 我考场上玩的欲仙欲死,结果只有 1\2\3\5\6\7 玩出了 >=2 的,其他的只有合法分
mxh1999
大家好这里是验题人。。 首先我是纯手玩的。。 其次大概不需要另外写模拟器,因为checker自带。 最后亲测5h大概能拿到50多分。。。 以上
carlyu
咦 我比赛时手玩不到三小时玩出61分?
dram
哈哈哈滥用数学公式真不错

发表评论

可以用@mike来提到mike这个用户,mike会被高亮显示。如果你真的想打“@”这个字符,请用“@@”。