CF1107A.Digits Sequence Dividing

传统题 时间 2000 ms 内存 256 MiB 4 尝试 1 已通过 1 标签

Digits Sequence Dividing

题目描述

给定一个由 nn 个数字(每个数字从 1199)组成的序列 ss

你需要将它划分为至少两个连续的片段(片段指的是一段连续的元素),也就是说,你需要在序列中的某些数字之间放置分隔符,使得每个元素恰好属于一个片段,并且如果将划分后的每个片段看作一个整数序列,则每个后继片段所代表的整数都严格大于前一个片段。

更正式地说:如果划分结果为 t1,t2,,tkt_1, t_2, \dots, t_k,其中 kk 是划分得到的片段数,则对于每个 ii 满足 1i<k1 \le i < k,都应满足 ti<ti+1t_{i} < t_{i+1}(按整数大小比较,即将字符串转为整数后比较)。

例如,如果 s=654s=654,你可以将其划分为 [6,54][6, 54],这是一个合法的划分。但如果划分为 [65,4][65, 4],则不合法,因为 65>465 > 4。如果 s=123s=123,你可以划分为 [1,23][1, 23][1,2,3][1, 2, 3],但不能划分为 [12,3][12, 3]

你的任务是,对于每个独立的 qq 个询问,找到任意一个满足条件的划分方案。

输入格式

输入的第一行包含一个整数 qq1q3001 \le q \le 300),表示询问的数量。

ii 个询问的第一行包含一个整数 nin_i2ni3002 \le n_i \le 300),表示第 ii 个询问的数字个数。

ii 个询问的第二行包含一个长度为 nin_i 的字符串 sis_i,仅由 1199 的数字组成。

输出格式

如果第 ii 个询问的数字序列无法按照题目要求划分为至少两个片段,则输出一行 "NO"。

否则,第一行输出 "YES"。第二行输出 kik_i,表示你划分出的片段数。第三行输出 kik_i 个字符串 ti,1,ti,2,,ti,kit_{i,1}, t_{i,2}, \dots, t_{i,k_i},即你的划分方案。片段应按原始字符串顺序输出,也就是说,将这些片段依次拼接起来应还原为原始字符串 sis_i

具体可参考样例理解。

说明/提示

由 ChatGPT 4.1 翻译

样例

4
6
654321
4
1337
2
33
4
2122
YES
3
6 54 321
YES
3
1 3 37
NO
YES
2
21 22

在线编程 IDE

建议全屏模式获得最佳体验