#ATarc163a. [ARC163A] Divide String

[ARC163A] Divide String

题目描述

给定一个长度为 NN 的仅包含小写英文字母的字符串 SS。请判断是否可以将 SS 分割为 22 个或更多连续的子字符串,并且这些子字符串按字典序严格递增排列。

更严格地说,判断是否存在一个字符串序列 t=(t1,t2,,tk)t=(t_1,t_2,\dots,t_k),满足以下所有条件:

  • 序列长度 kk 至少为 22
  • 每个 tit_i 都非空(1ik1 \le i \le k)。
  • 按顺序连接 t1,t2,,tkt_1,t_2,\dots,t_k 恰好等于 SS
  • 对于任意满足 1i<k1 \le i < k 的整数 ii,都有 tit_i 在字典序上严格小于 ti+1t_{i+1}

给定 TT 组测试数据,请分别输出每组的答案。

什么是字典序?对于字符串 S=S1S2SSS = S_1S_2\ldots S_{|S|}T=T1T2TTT = T_1T_2\ldots T_{|T|},若满足以下 1. 或 2.,则称 SS 在字典序上小于 TT。其中 S,T|S|, |T| 分别表示 S,TS,T 的长度。

  1. S<T|S| < |T|S1S2SS=T1T2TSS_1S_2\ldots S_{|S|} = T_1T_2\ldots T_{|S|}
  2. 存在整数 1imin{S,T}1 \leq i \leq \min\lbrace |S|, |T| \rbrace,同时满足:
    • S1S2Si1=T1T2Ti1S_1S_2\ldots S_{i-1} = T_1T_2\ldots T_{i-1}
    • SiS_i 是按字母顺序小于 TiT_i 的字符。

输入格式

输入按以下格式从标准输入读入。

TT
case1\mathrm{case}_1
case2\mathrm{case}_2
\vdots
caseT\mathrm{case}_T

其中,第 ii 个测试用例 casei\mathrm{case}_i 格式如下:

NN SS

输出格式

输出 TT 行。

ii 行输出第 ii 个测试用例的答案。如果可以将 SS 按要求分割,输出 Yes,否则输出 No

样例 1

输入

5
4
abac
3
cac
2
ab
12
abababababab
5
edcba

输出

Yes
No
Yes
Yes
No

说明/提示

数据范围

  • 1T20001 \le T \le 2000
  • 2N20002 \le N \le 2000
  • SS 是长度为 NN 的小写英文字母字符串
  • 所有测试用例中 NN 的总和不超过 20002000

样例解释 1

11 个测试用例,可以将 SS 分割为 abac。第 22 个测试用例,无论如何分割都无法使子串按字典序严格递增。

由 ChatGPT 4.1 翻译