CF208B Solitaire
题目描述
一个叫 Vasya 的男孩想玩一种名为“Accordion”的俄罗斯老纸牌接龙。在这种接龙中,玩家需要遵循以下规则:
- 一副包含 $ n $ 张牌的牌堆被彻底洗乱,然后这 $ n $ 张牌被从左到右依次放在桌子上;
- 在每一步操作前,桌面上有若干堆牌排成一行(最初有 $ n $ 堆,每堆各有一张牌)。我们将这些牌堆从左到右编号为 $ 1 $ 到 $ x $。在一次操作中,玩家可以将编号最大(即最右边)的第 $ x $ 堆整个拿起,放到第 $ x-1 $ 堆(如果存在)或第 $ x-3 $ 堆(如果存在)的顶部。只有当两堆顶部的牌花色相同或数值相同时,才允许这样移动。如果把第 $ x $ 堆放到第 $ y $ 堆顶部,那么合并后,新堆的顶部是原 $ x $ 堆的顶部。同时,每次移动后,总堆数减少 $1$;
- 当全部牌都归为一堆时,视为纸牌接龙完成。
Vasya 已经洗好了牌并将它们摆在桌面上,请你帮他判断能否完成这局纸牌接龙。
输入格式
第一行包含一个整数 $ n $ $(1 \leq n \leq 52)$ —— Vasya 牌堆中的牌数。
第二行包含 $ n $ 个用空格分隔的字符串 $ c_{1},c_{2},...,c_{n} $,每个字符串 $ c_{i} $ 描述桌面上的第 $ i $ 张牌。每个 $ c_{i} $ 恰好由两个字符组成,第一个字符表示数值,第二个字符表示花色。牌从左到右编号。
一张牌的数值由以下字符之一表示:“2”, “3”, “4”, “5”, “6”, “7”, “8”, “9”, “T”, “J”, “Q”, “K”, “A”。花色由以下字符之一表示:“S”, “D”, “H”, “C”。
不保证 Vasya 牌堆中包含所有可能的牌。同一张牌也可能重复出现。
输出格式
输出一行,如果接龙可以完成,则输出字符串 "YES";否则输出 "NO"。
说明/提示
在第一个样例中,你可以这样操作:
- 将第 4 堆放到第 1 堆上;
- 将第 3 堆放到第 2 堆上;
- 将第 2 堆放到第 1 堆上。
在第二个样例中,无法完成接龙。
由 ChatGPT 5 翻译