题单练习 双序列型DP入门

A6957 | 完美的洗牌

时间限制1s
内存限制128MB
通过 / 提交0/0

题目描述

魔术师手中有两叠扑克牌,我们把它们记作牌堆 $A$ 和牌堆 $B$。
牌堆 $A$ 中包含 $N$ 张牌,从上到下依次记录为字符串 $S_1$。
牌堆 $B$ 中包含 $M$ 张牌,从上到下依次记录为字符串 $S_2$。

现在魔术师进行一次“完美洗牌”操作:他将这就两堆牌交错地插在一起,形成了一堆新的牌(包含 $N+M$ 张),记作 $S_3$。

在洗牌过程中,魔术师必须遵守以下规则:
1. 顺序保留:来自 $S_1$ 的牌在 $S_3$ 中的相对顺序不能改变;来自 $S_2$ 的牌在 $S_3$ 中的相对顺序也不能改变。
2. 完全使用:$S_3$ 必须恰好包含 $S_1$ 和 $S_2$ 中的所有字符,不多也不少。

现在给你三个字符串 $S_1, S_2, S_3$,请你判断 $S_3$ 是否能由 $S_1$ 和 $S_2$ 通过上述“洗牌”规则得到。

输入格式

输入共三行。
第一行包含一个字符串 $S_1$。
第二行包含一个字符串 $S_2$。
第三行包含一个字符串 $S_3$。

输出格式

如果 $S_3$ 是由 $S_1$ 和 $S_2$ 交错组成的,输出 1;否则输出 0

输入输出样例

输入 #1
aabcc
dbbca
aadbbcbcac
输出 #1
1
输入 #2
aabcc
dbbca
aadbbbaccc
输出 #2
0
C++ 编辑器
输入
输出