loj#P2770. 「ROI 2017 Day 2」存储器

「ROI 2017 Day 2」存储器

题目描述

题目译自 ROI 2017 Day 2 T1. Накопитель

假设有一个字符串 P[1N]P[1\ldots N] 仅含有 +- 两种字符(你就当做这是 Pascal 里的字符数组 qwq)。如果 PP 的子串 P[LR   ⁣]P[L\ldots R\;\!] (LR)(L\le R) 同时满足:

  • 子串里只有一种字符 cc
  • L=1L=1, 或子串左边的第一个字符 P[L1]P[L-1]cc 不同;
  • R=NR=N, 或子串右边的第一个字符 P[R+1]P[R+1]cc 不同;

那么 P[LR   ⁣]P[L\dots R\;\!] 即为 PP 的一个「片段」。

给你 qq 组询问,每次询问包含两个字符串 si,tis_i, t_i,这两个字符串都只含有 +- 两种字符。
试问:能否将 sis_i 通过若干次「变换」修改为 tit_i
在每一次变换中,你可以在字符串中找两个「相邻」且「长度不同」的片段,将二者中较短的片段里面所有的字符改为另一种字符(+ 改成 -- 改成 +)。改完后,如果满足条件,这个片段会和两边融合,成为新的一大块片段。

输入格式

第一行,一个整数 qq
在接下来的 qq 行中,每行有两个仅包含 + - 的字符串 si,tis_i, t_i,用空格分隔。

3
++- +++
++-- ++++
++-+--+- ++++++++
Yes
No
Yes
3
++-+-- ++----
++-+-- +++---
-++- -++-
Yes
No
Yes

数据范围与提示

子任务编号 分值 si\sum\lvert s_i \rvert 额外限制
1 20 si16\sum\lvert s_i \rvert ⩽ 16 tit_i 中没有 -
2 30 si1000\sum\lvert s_i \rvert ⩽ 1000
3 20 si106\sum\lvert s_i \rvert ⩽ 10^6
4 20  si1000\sum\lvert s_i \rvert ⩽ 1000
5 10 si106\sum\lvert s_i \rvert ⩽ 10^6 无