CF2048C.Kevin and Binary Strings

普及-

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

Kevin 在月光河公园的河里发现了一个二进制字符串 ss,它以 1 开头,并把它交给了你。你的任务是从 ss 中选择两个非空子串(允许重叠),以使得它们之间的异或值最大。

对于两个二进制字符串 aa 和 bb,它们的异或结果是将 aa 和 bb 看作二进制数后,进行按位异或操作 ⊕\oplus 所得到的结果,其中最左边的位即为最高位。可以参考按位异或操作。

你选择的字符串可以包含前导零。

输入格式

输入包含多个测试用例。第一行是测试用例的数量 tt(1≤t≤1031 \le t \le 10^3)。

接下来的每个测试用例有一行,包含一个以 1 开头的二进制字符串 ss(1≤∣s∣≤50001 \le |s| \le 5000)。

保证所有测试用例中 ∣s∣|s| 的总长度不超过 50005000。

输出格式

对于每个测试用例,输出四个整数 l1,r1,l2,r2l_1, r_1, l_2, r_2(1≤l1≤r1≤∣s∣1 \le l_1 \le r_1 \le |s|, 1≤l2≤r2≤∣s∣1 \le l_2 \le r_2 \le |s|)——表示你选择的两个子串分别是 sl1sl1+1…sr1s_{l_1} s_{l_1 + 1} \ldots s_{r_1} 和 sl2sl2+1…sr2s_{l_2} s_{l_2 + 1} \ldots s_{r_2}。

如果存在多种可能的解,输出任意一种即可。

输入输出样例

  • 输入#1

    5
    111
    1000
    10111
    11101
    1100010001101

    输出#1

    2 2 1 3
    1 3 1 4
    1 5 1 4
    3 4 1 5
    1 13 1 11

说明/提示

在第一个测试用例中,我们可以选择 s2=1s_2 = \texttt{1} 和 s1s2s3=111s_1 s_2 s_3 = \texttt{111},此时 1⊕111=110\texttt{1} \oplus \texttt{111} = \texttt{110}。可以证明这是可能得到的最大值。此外,选择 l1=3l_1 = 3,r1=3r_1 = 3,l2=1l_2 = 1,r2=3r_2 = 3 也是一个有效的解决方案。

在第二个测试用例中,选择 s1s2s3=100s_1 s_2 s_3 = \texttt{100} 和 s1s2s3s4=1000s_1 s_2 s_3 s_4 = \texttt{1000},则异或结果为 100⊕1000=1100\texttt{100} \oplus \texttt{1000} = \texttt{1100},也是最大的结果。

本翻译由 AI 自动生成

输入解题思路,AI测评打分。不知道怎么写?

首页