#P15072. [ICPC 2024 Chengdu R] Arrow a Row

[ICPC 2024 Chengdu R] Arrow a Row

题目描述

定义一个“箭头字符串”为满足以下条件的字符串:

  • 字符串长度至少为 55。
  • 字符串以 >\tt{>} 开头,以 >>>\tt{>}\tt{>}\tt{>} 结尾。
  • 字符串的其余部分仅由 −\tt{-} 组成。

例如,>−−>>>\tt{>}\tt{-}\tt{-}\tt{>}\tt{>}\tt{>} 和 >−−−>>>\tt{>}\tt{-}\tt{-}\tt{-}\tt{>}\tt{>}\tt{>} 是有效的箭头字符串,而 >−>>\tt{>}\tt{-}\tt{>}\tt{>} 和 >−>−>>>\tt{>}\tt{-}\tt{>}\tt{-}\tt{>}\tt{>}\tt{>} 则不是。

Sauden 给你一个长度为 nn 的字符串 ss,仅由 >\tt{>} 和 −\tt{-} 组成。你需要通过对一个同样长度为 nn、完全由 ∗\tt{*} 组成的字符串执行一系列绘制操作来创建 ss。在一次绘制操作中,你可以选择一个长度至少为 55 的子串,并将其转换为一个箭头字符串。你执行的操作总数不能超过 nn。

如果无法在不超过 nn 次绘制操作的情况下获得字符串 ss,则输出 No\texttt{No}。否则,输出 Yes\texttt{Yes} 并提供绘制操作的详细信息。如果有多种解决方案,输出任意一种即可。

输入格式

  • 第一行包含一个整数 TT(1≤T≤1041\le T\le 10^4),表示测试用例的数量。
  • 每个测试用例包含一行,为一个长度为 nn(5≤n≤1055 \le n \le 10^5)的字符串 ss,仅由 >\tt{>} 和 −\tt{-} 组成。

保证所有测试用例的 nn 之和不超过 5⋅1055 \cdot 10^5。

输出格式

对于每个测试用例,如果无法在不超过 nn 次绘制操作的情况下获得给定字符串,则输出一行 No\texttt{No}。否则,输出 Yes\texttt{Yes} 和一个正整数 mm(1≤m≤n1 \le m \le n),表示需要执行的绘制操作次数。随后输出 mm 行,每行包含两个整数 pp(1≤p≤n−41\le p\le n-4)和 ll(5≤l≤n+1−p5\le l\le n+1-p),分别表示所选子串的起始位置和长度。

4
>>->>>
>>>->
>>>>>
>->>>>>>
Yes 2
1 5
2 5
No
No
Yes 2
2 7
1 5

提示

对于示例中的第四个测试用例,绘制过程如下所示:

:::align{center} ∗∗∗∗∗∗∗∗\tt{*}\tt{*}\tt{*}\tt{*}\tt{*}\tt{*}\tt{*}\tt{*} →\rightarrow $\tt{*}\underline{\tt{>}\tt{-}\tt{-}\tt{-}\tt{>}\tt{>}\tt{>}}$ →\rightarrow $\underline{\tt{>}\tt{-}\tt{>}\tt{>}\tt{>}}\tt{>}\tt{>}\tt{>}$ :::

翻译由 DeepSeek V3 完成