CF1451B Non-Substring Subsequence
题目描述
Hr0d1y 有 $q$ 个关于一个长度为 $n$ 的二进制字符串 $s$ 的询问。二进制字符串是仅包含字符 '0' 和 '1' 的字符串。
每个询问由一对整数 $l_i$、$r_i$ $(1 \leq l_i < r_i \leq n)$ 描述。
对于每个询问,他需要判断是否存在一个好的子序列等于子串 $s[l_i\ldots r_i]$。
- 字符串 $s[i\ldots j]$ 表示字符串 $s$ 的第 $i$ 个到第 $j$ 个字符组成的子串,即 $s_i s_{i+1} \ldots s_j$。
- 如果字符串 $a$ 可以通过从字符串 $b$ 中删除某些字符(不改变剩余字符的顺序)得到,则称 $a$ 是 $b$ 的一个子序列。
- 如果一个子序列不是连续的且长度 $\ge 2$,则称其为好的子序列。例如,若 $s$ 为 "1100110",则子序列 $s_1s_2s_4$("1100110")和 $s_1s_5s_7$("1100110")是好的子序列,而 $s_1s_2s_3$("1100110")不是好的子序列。
你能帮助 Hr0d1y 回答每个询问吗?
输入格式
输入的第一行包含一个整数 $t$($1 \leq t \leq 100$)——表示测试用例的数量。每个测试用例的描述如下:
第一行包含两个整数 $n$($2 \leq n \leq 100$)和 $q$($1 \leq q \leq 100$)——字符串的长度和询问的数量。
第二行包含字符串 $s$。
接下来的 $q$ 行中,第 $i$ 行包含两个整数 $l_i$ 和 $r_i$($1 \leq l_i < r_i \leq n$)。
输出格式
对于每个测试用例,输出 $q$ 行。每个测试用例的第 $i$ 行输出 "YES",如果存在一个好的子序列等于子串 $s[l_i\ldots r_i]$,否则输出 "NO"。
你可以用任意大小写输出每个字母。
说明/提示
在第一个测试用例中:
- $s[2\ldots 4] = $ "010"。在这种情况下,$s_1s_3s_5$("001000")和 $s_2s_3s_6$("001000")是合适的好的子序列,而 $s_2s_3s_4$("001000")不是好的子序列。
- $s[1\ldots 3] = $ "001"。不存在合适的好的子序列。
- $s[3\ldots 5] = $ "100"。这里 $s_3s_5s_6$("001000")是合适的好的子序列。
由 ChatGPT 4.1 翻译